您的位置:首页 > 其它

百团纳新

2016-02-04 22:53 260 查看
[题目描叙]

最期待的就是每年的百团纳新了有木有,为何呢,当然是寻找单身组织了。加了社团,总会

有各种见面会啊,一伙人围坐一圈总不能一直眼神交流吧,轮流出节目吧。

假设你是第一个,你给出一个数字 num,从你开始报数 1,你的右手方向报数 2,以此类推,

直到报数为 num 的要表演节目。表演完,从表演者的下一个继续从 1 开始报数,已经报过

数的人不用再报,直到只剩最后一个没出过节目的,当然了最后一个不用出节目。

身为 IT 男神,总不能现场表演敲代码吧,唯一的办法就是成功避开所有为 num 的报数。

输入:

第一行输入一个正整数 N,N<100,表示有 N 个人围成一圈

接下来有 N 行,表示从你开始往右手方向的 N 个人的名字,第一个是你的名字

输出:

第一行输出 num,表示你能给出的最小的 num 使你能避开所有为 num 的报数

接下来有 N-1 行,按表演顺序输出表演者的名字

样例输入:

5

Mike

Jake

Marry

KangKang

June

样例输出:

4

KangKang

Marry

June

Jake

[解题思路]

num的值从2一直往n递增,直到剩下的最后一个人是自己,这时跳出循环,得到的num值就是满足题意的最小的num值!

[代码]

#include<stdio.h>
#include<string.h>

int main()
{
int n;
int i;
char a[100][10];
char b[100][10];
char d[100][10];
char me[2][10];
scanf("%d",&n);
int m=n;
for(i=1;i<=n;i++)
{
scanf("%s",a[i]);
strcpy(d[i],a[i]);
}
strcpy(me[1],a[1]);
for(int num=2;;num++){
int temp=num;
char c[100][10];
int signC=1;
int sign=1;
n=m;
int s=num;
while(n!=1)
{
if(temp%n!=0)
num=temp%n;
else num=n;
if(strcmp(me[1],a[num])==0){sign=0;break;}
strcpy(c[signC],a[num]);
signC++;
int s=1;
for(int j=num+1;j<=n;j++){
strcpy(b[s],a[j]);
s++;
}
for(int m=1;m<num;m++){
strcpy(b[s],a[m]);
s++;
}

for(int k=1;k<s;k++){
strcpy(a[k],b[k]);
}
n--;
}
num=s;
if(sign)
{
printf("%d\n",temp);
for(i=1;i<m;i++)
{
printf("%s\n",c[i]);
}
break;
}
for(i=1;i<=m;i++)
{
strcpy(a[i],d[i]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: