请高手编程!!!

来源:百度知道 编辑:UC知道 时间:2024/05/17 17:36:35
设有n个人,围坐一圈,并按顺时针方向从1~n编号,从s个人开始进行,1~m的报数,报数到第n个人此人出圈,再从他的下一个人从新开始,1~m的报数,如此进行下去直到所有的人都出圈为止,现要求按出圈次序每10人一组,给出这n个人的顺序表?
用main做主程序 做C语言程序

/*
* 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数)
* 凡报到3的人退出圈子,问最后留下的是原来第几号的哪位
*/
#include <iostream>

int main()
{
int k = 0, //k为1,2,3报数时的计数变量
n = 0,
m = 0, //m为退出人数
num [50];
int* p = num;;

std::cout<<"Input number of person: n = ";
std::cin>>n;

for (int i=0; i<n; ++i)
{
*(p+i) = i+1; //以1至n为序给每个人编号
}
i = 0;
while (m < (n-1)) //当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if (*(p+i) != 0)
{
k++;
}
if (3 == k) //对退出的人编号置为0
{
*(p+i) = 0;
k = 0;
m++;
}
i++;
if (n == i) //报数到尾后,i恢复为0
{
i = 0;
}
}
while (0 == *p)
{
p++;
}
std::cout<<"The last one is NO."<<*p<<std::endl;

return EXIT_SUCCESS;
}
/*运行结果:
Input number of person: n = 8
The last one is NO.7 (最后留在圈