一、约瑟夫环
1.数组解法
int _tmain(int argc, _TCHAR* argv[]) { int i, j; int a[N] = {0}; //表示N号人还在圈中 int ptr = 0; //标记当前数到位置的指针 for (i = 0; i < N; i++) { for (j = 1; j < M; j++) { ++ptr %= N; while (a[ptr] == 1) ++ptr %= N; } printf("%d ", ptr%N); a[ptr] = 1; ++ptr %= N; while (a[ptr]==1) ++ptr %= N; } return 0; }
2.链表解法
二、斐波那契数列
1.递归解法
1 typedef unsigned long ulong; 2 3 ulong Fiblnacci(int n) 4 { 5 if (n <= 2) 6 return 1; 7 return Fiblnacci(n - 1) + Fiblnacci(n - 1); 8 }
2.非递归解法
typedef unsigned long ulong; ulong Fiblnacci(int n) { ulong f1=1, f2=1, f3; int n = 1; scanf("%d",&n); if (n == 1) return f1; else if (n == 2) return f2; else if (n >= 3) { for (int i = 3; i < n; i++) { f3 = f1 + f2; f1 = f2; f2 = f3; } } return f3; }
三、最大公约数
1.辗转相除
void swap(int&a, int&b) { int c = a; a = b; b = c; } int gcd(int a, int b) { if (a == 0) return b; if (b == 0) return a; if (a > b) swap(a,b); int c; for (c = a%b; c > 0; c = a%b) { a = b; b = c; } return b; }
四、素数
打印100以内的素数
1.开根号法
写一个函数找出一个整数数组中,第二大的数
1 const int MINNUMBER =-32767 ; 2 int find_sec_max( int data[] , int count) 3 { 4 int maxnumber = data[0] ; 5 int sec_max = MINNUMBER ; 6 for ( int i =1 ; i < count ; i++) 7 { 8 if ( data[i] > maxnumber ) 9 { 10 sec_max = maxnumber ; 11 maxnumber = data[i] ; 12 } 13 else 14 { 15 if ( data[i] > sec_max ) 16 sec_max = data[i] ; 17 } 18 } 19 return sec_max ; 20 }