grids 2746 约瑟夫问题

  • 题意

  • 中文不解释
  • 思路

  • 这个一道模拟题,要按照题意的步骤执行就可以得出结果,基本步骤为

    (1)数数
    (2)所数的数从列表中取出
    (3)判断是否为1,是则输出,不是则继续
  • 总结

  • 暂无
  • 代码

  • (I)方法一:使用数组+前移


    grids 2746 约瑟夫问题_第1张图片



    (1)C




    #include "stdio.h"
    //#include "stdlib.h"
    #define max 300
    int a[max+2];
    int main()
    {
     	int n,m;
     	int i,j;
     	while(scanf("%d%d",&n,&m) != EOF && !(n==0 && m==0))
     	{
            for(i=0;i<n;i++) a[i]=i+1;
            i=0;
            while(n!=1)
            {
                i=(i+m-1)%n;
                for(j=i+1;j<n;j++){a[j-1]=a[j];}
                n--;
            }
            printf("%d\n",a[0]);
        }
        //system("pause");
        return 0;
    }
    


    (2)C++




    #include "iostream"
    //#include "cstdlib"
    using namespace std;
    const int MAX = 300;
    int a[MAX+2];
    int main()
    {
        int n,m;
     	while((cin>>n>>m) && !(n==0 && m==0))
     	{
            int i;
            for(i=0;i<n;i++) a[i]=i+1;
            i=0;
            while(n!=1)
            {
                i=(i+m-1)%n;
                for(int j=i+1;j<n;j++){a[j-1]=a[j];}
                n--;
            }
            cout<<a[0]<<endl;
        }
        //system("pause");
        return 0;
    }
    
    
    

    你可能感兴趣的:(C++,c,grids,OpenJudge,2746)