1 条题解

  • 0
    @ 2024-12-24 9:49:23

    C :

    #include <stdio.h>
    
    void fun(int n,int m)
    {
        int p[10000] ;
        int i ,j ,t ;
        for(i=0;i<n;i++)
            p[i] = i+1 ;  //对全体进行编号
        t = 0 ;
       // printf("出队顺序如下\n") ;
        for(i=n;i>=1;i--)
        {
            t = (t+m-1)%i ; //循环公式
            printf("%d ",p[t]) ;
            for(j = t+1;j<=i-1;j++)
                p[j-1] = p[j] ;
        }
        printf("\n") ;
    }
    
    int main()
    {
        //printf("输入人数n和出队编号m\n") ;
        int n, m ;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
        fun(n,m) ;
        }
        return 0 ;
    }
    
    

    C++ :

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cctype>
    #include<cmath>
    #include<algorithm>
    #include<iostream>
    #include<string>
    #include<vector>
    #include<bitset>
    #include<queue>
    #include<stack>
    #include<list>
    #include<map>
    #include<set>
    
    #define TEST
    
    #define LL long long
    #define Mt(f, x) memset(f, x, sizeof(f));
    #define rep(i, s, e) for(int i = (s); i <= (e); ++i)
    #ifdef TEST
        #define See(a) cout << #a << " = " << a << endl;
        #define See2(a, b) cout << #a << " = " << a << ' ' << #b << " = " << b << endl;
        #define debug(a, s, e) rep(_i, s, e) {cout << a[_i] << ' ';} cout << endl;
        #define debug2(a, s, e, ss, ee) rep(i_, s, e) {debug(a[i_], ss, ee)}
    #else
        #define See(a)
        #define See2(a, b)
        #define debug(a, s, e)
        #define debug2(a, s, e, ss, ee)
    #endif // TEST
    
    const int MAX = 2e9;
    const int MIN = -2e9;
    const double eps = 1e-8;
    const double PI = acos(-1.0);
    
    using namespace std;
    
    bool a[35];
    int b[35];
    
    int main()
    {
        int n, m;
        while(~scanf("%d%d", &n, &m))
        {
            Mt(a, true);
            int num = 0;
            int i = 0, tem = 0;
            while(i < n)
            {
    //            See(i);
                if(a[i])
                {
                    tem++;
                }
                if(tem == m)
                {
                    a[i] = false;
                    b[num++] = i + 1;
                    tem = 0;
                    if(num == n)
                    {
                        break;
                    }
                }
                i++;
                if(i == n)
                {
                    i = 0;
                }
            }
            for(int i = 0; i < num - 1; ++i)
            {
                printf("%d ", b[i]);
            }
            printf("%d\n", b[num - 1]);
        }
        return 0;
    }
    
    
    
    • 1

    信息

    ID
    844
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者