标签:style c class blog code java
出题:Josephus Cycle,约瑟夫环问题。k个数字连成一个环,第一个数字为1。首先从1开始计数删除第m个数字;然后从上次被删除的数字的下一个数字开始计数,删除第m个数字;重复进行第二步直到只剩下一个数字;输出最后剩下的一个数字;
分析:
解题:
1 struct Node { 2 int v; 3 Node *next; 4 }; 5 /** 6 * 哑元素为-1 7 * 简单起见总长度缺省为8,m为指定的跨距 8 * */ 9 int ListJose(int m) { 10 Node* b1=new Node(); b1->v=1; 11 Node* b2=new Node(); b2->v=2;b1->next=b2; 12 Node* b3=new Node(); b3->v=3;b2->next=b3; 13 Node* b4=new Node(); b4->v=4;b3->next=b4; 14 Node* b5=new Node(); b5->v=5;b4->next=b5; 15 Node* b6=new Node(); b6->v=6;b5->next=b6; 16 Node* b7=new Node(); b7->v=7;b6->next=b7; 17 Node* b8=new Node(); b8->v=8;b7->next=b8; b8->next=b1; 18 19 Node *current=b1, *temp; 20 int count; 21 22 while(true) { 23 /** 24 * 每删除一个数字都需要重设count 25 * */ 26 count=1; 27 temp=current->next; 28 /** 29 * 这个循环用于寻找从current开始计数 30 * 的第m个数 31 * */ 32 while(true) { 33 if(temp->v != -1) { 34 count++; 35 } 36 if(count == m) break; 37 temp=temp->next; 38 } 39 /** 40 * 此时temp索引的就是需要删除的第m 41 * 个数 42 * */ 43 temp->v=-1; 44 /** 45 * 这个循环用于寻找被删除元素的下一个元素 46 * 注意需要是非-1值的节点 47 * */ 48 temp=temp->next; 49 while(temp->v == -1) { 50 temp=temp->next; 51 } 52 /** 53 * 此时temp索引的就是下一个可计数的元素,但是 54 * 检查其是否就是current本身,是的话说明已经 55 * 只有一个元素;否则更新current,进入下一次 56 * 循环 57 * */ 58 if(temp == current) break; 59 else current=temp; 60 } 61 return current->v; 62 } 63 /** 64 * 数组的实现与链表类似,不过需要使用%取模操作符使得数组变成循环 65 * 结构 66 * */ 67 int ArrayJose(int m) {}
出题:Fibonacci数列定义如下,要求用O(N)的时间找到第n个元素,O(logN)呢
0
n=0
f(n) = 1
n=1
f(n-1)+f(n-2) n>=2
分析:
解题:
1 double Fibonacci(double n) { 2 double first=0.0; 3 double second=1.0; 4 double current=0.0; 5 6 for(int i=2;i<=n;i++) { 7 current=first+second; 8 9 first=second; 10 second=current; 11 } 12 13 return current; 14 }
笔试算法题(11):Josephus环 & Fibonacci序列,布布扣,bubuko.com
笔试算法题(11):Josephus环 & Fibonacci序列
标签:style c class blog code java
原文地址:http://www.cnblogs.com/leo-chen-2014/p/3736196.html