新生军训开始了,1班n位同学给自己班级战队取名为“1level1”,呵呵,他们的战队名是一个回文串。汇报表演开始了,n位同学围成一圈,并顺序编号为1~n。1班准备了7面旗帜,分别写上了1,l,e,v,e,l,1。他们从第一个人开始报数(从1到m报数),凡报数为m的人恰好手上举着一个写着字母(数字)的旗帜并退出圈子。依次退出了7个人(1level1的长度为7),按照退出的先后顺序排成一排,旗帜上的字母依次正好组成了1level1。
你是班长,肯定知道班级有多少人,现在知道汇演口令是从1到m报数,怎么去安排哪7人分别拿哪个旗帜?
不会啊
猴子选大王的变种题目,用一个数组做标记,到m的出队,一直到出队7个人为止
运行结果(输入的10表示一共有10个人,3表示报的数):
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,i,cnt=1,n,m;
int k = 0;
char flag[] = "1level1";
scanf("%d %d",&N,&m); //N代表多少人,m是报的数
n = N;
int* p = (int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++) //初始化状态为0
p[i] = 0;
while(n)
{
for(i=0;i<N;i++)
{
if(p[i]==0) //0表示还在队伍中,1表示已经退出
{
if(cnt%m==0)
{
cnt = 1; //从1开始报数
k++;
n--;
p[i]=1;
printf("第%d个人拿%c\n",i+1,flag[k-1]);
if(k==7)
return 0;
}else
cnt++;
}
}
}
delete[] p;
p=0;
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!