特殊数

一、约瑟夫环

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 }    
原文地址:https://www.cnblogs.com/SnailProgramer/p/4842856.html