游客 Signup | Login
中文 | En

3615 - 小丑

有N个人玩游戏选小丑,所以选择了一个方法,所有人按1,2,3.。。。N编号坐在一起。从第一个人开始1,2,3.。M

报数

只要是报到M的,就安全,并离开位置。依次循环报数。直到之剩下一个人。那他就倒霉了。我们所要做的就是

输入N与M,输出安全的人的号数

最后一个就是小丑

Input

第一行输入2个整数N,M,用逗号隔开. N<=100,M<=100;

Output

对于每组测试数据依次输出安全号数。

注意最后不要有空格

Examples

Input

10,3
10,2

Output

3 6 9 2 7 1 8 5 10 4
2 4 6 8 10 3 7 1 9 5

Hint

出题人:刘露

Solution C

#include  <stdio.h>
#define MAX 105
int main()
{
    int n,m;
    int len;
    int data[MAX];
    int a,i,x,xx,nn=0;
    while(scanf("%d,%d",&n,&m)!=EOF)
    {
        len=n;
        for(i=1;i<=n;i++)
        {
            data[i]=i;
        }
        x=0;
        xx=0;
        if(nn)
            printf("\n");
        else
            nn=1;
        while(len!=1)
        {
            a=0;
            for(i=1;i<=len;i++)
            {
                x++;
                if(x==m)
                {
                    if(xx)
                        printf(" ");
                    else
                        xx=1;
                    printf("%d",data[i]);
                    x=0;
                    continue;
                }
                data[++a]=data[i];
            }
            len=a;
        }
        printf(" %d",data[1]);
    }
    return 0;
}

Solution C++

#include <bits/stdc++.h>
using namespace std;
int main()
{
	//freopen("F:\\TestFiles\\test.in","r",stdin);
	//freopen("F:\\TestFiles\\test2.out","w",stdout);
	int n,m;
	while(~scanf("%d,%d",&n,&m)){
		
		int a[105];
		
		memset(a,0,sizeof(a));
		
		int num=0;
		
		int i=0,j=0;
		
		queue<int> q;

		while(num<n){
			
			i++;
			if (a[i]==0){
				j++;
				if (j==m){
					a[i]=1;
					j=j%m;
					
					if (i>0) q.push(i);
					else q.push(n);
					
					num++;
					
				}
			}
			i=i%n;
		}
		
		int kk=0;
		while(q.size()){
			
			if (kk) printf(" ");
			else kk=1;
			
			printf("%d",q.front());
			q.pop();
		}
		
		printf("\n");
		
	}
	return 0;
}

Hint

出题人:刘露

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题