百团纳新

来源:互联网 发布:域名怎么收费 编辑:程序博客网 时间:2024/04/30 09:30

[题目描叙]

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

有各种见面会啊,一伙人围坐一圈总不能一直眼神交流吧,轮流出节目吧。
假设你是第一个,你给出一个数字 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]);}}}


0 0
原创粉丝点击