天天看點

ZOJ 1088 約瑟夫問題

//1088約瑟夫問題

//  這裡我用了簡化算法,參考以下的說明,隻是有點不同先把第一個删掉,從第二個開始數,

//  循環n-1遍(因為已去掉首個),最終剩下目前的第一個結束。

#include<iostream>

using namespace std;

int main()

{

    int n;

    while(cin>>n && n!=0)

    {

        int i;

        int ans;

        for(i=2;i<=32767;i++)

        {

            ans=0;

            int j;

            for(j=2;j<n;j++)      // 與這個for (i=2; i<=n; i++) s=(s+m)%i;差別

                ans=(ans+i)%j;

            if(ans==0)            //相當于ans+1==1時結束

            {

                cout<<i<<endl;

                break;

            }

        }

    }

    return 0;

}

轉載于:https://www.cnblogs.com/VRS_technology/archive/2010/05/11/1732300.html