1 条题解

  • 0
    @ 2025-2-14 20:50:07

    C :

    #include<stdio.h>
    int main()
    {
    	int m,n,a[16],i,j,k,q,p,chu;
    	scanf ("%d%d",&m,&n);
    	for (i = 1;i <= m;i++)
    		a[i] = i;
    	k = 0;
    	p = m;
    	chu = n;
    	for (j = 0;j < m;j++)
    	{
    		if (n > p&&n%p !=0)
    			chu = n%p;
    		else if(n > p&&n%p ==0)
    		    chu = p;
    		else chu = n;
    		for (i = k+1;;i++)
    		{
    			if (i > m)
    					i = 1;
    			if (a[i] == 0)
    				continue;
    			if (a[i]%chu == 0)
    			{
    				printf ("%d\n",i);
    				if (p != 1)
    			    a[i] = 0;
                    break;
    			}
    		}
    			for (k = i+1,q = 1;;k++)
    			{
    				if (k > m)
    					k = 1;
    				if (k+1 == i+1&&q != 1)
    					break;
    				if (a[k] == 0)
    				continue;
    				a[k] = q;
    				q++;
    			}
    			p--;
    	}
    	return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #define LL long long
    #define ULL unsigned long long
    #define DB double
    #define FO(i,n) for(LL i=0;i<n;i++)
    #define FOD(i,n) for(LL i=n-(LL)1;i>=0;i--)
    #define FOR(i,a,b,c) for(LL i=a;i<=b;i+=c)
    #define FORD(i,a,b,c) for(LL i=a;i>=b;i-=c)
    #define MS(a,b) memset(a,b,sizeof(a))
    using namespace std;
    
    bool vis[20];
    
    int main()
    {
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
        freopen("out.txt","w",stdout);
    #endif // ONLINE_JUDGE
        int n,m;
        scanf("%d%d",&n,&m);
        MS(vis,0);
        int wz=0;
        FO(i,n)
        {
            int ans;
            int cs=m;
            int xx=0;
            while(1)
            {
                if(wz==n) wz=0;
                if(!vis[wz])
                xx++;
                if(xx==cs) {ans=wz+1;xx=0;vis[wz]=true;break;}
                wz++;
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    
    
    
    
    
    
    
    
    

    Pascal :

    program t1051;
    var m,n,i,j,s:integer;
    a:array[0..15] of integer;
    begin
      readln(m,n);
      fillchar(a,length(a),0);
      //fillchar(a,m,1);
      //for i:=1 to 15 do a[i]:=0;
      for i:=1 to m do a[i]:=1;  {初始准备}
      j:=0;
      for i:=1 to m do  {输出m个出圈人编号}
        begin 
          s:=0; {计数清0}
          while s<n do {计数为n时结束}
            begin
              if j<m then j:=j+1 else j:=1;  {处理下标}
              s:=s+a[j];     {计数}
            end;
          writeln(j);  {输出出圈人编号}
          a[j]:=0;   {该元素清0}
        end;   
    end.
    

    Python :

    # coding=utf-8
    n,m=map(int,input().split())
    l=[]
    for i in range(n):
        l.append(i+1)
    c=0
    j=0
    while l:    
        c+=1
        if c==m:
            print(l.pop(j))
            j-=1
            c=0
        if l:
            j=(j+1)%len(l)
    
    • 1

    信息

    ID
    379
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者