c语言报数出圈函数PTA 圆圈报数c语言函数
M个人围成一圈报数,报到N的人出列,输出出列顺序!用C语言实现!
此题可用数学方法求解。
长治网站建设公司创新互联建站,长治网站设计制作,有大型网站制作公司丰富经验。已为长治数千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的长治做网站的公司定做!
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)
实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。
假设除去第k个人,则
0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 // 原始序列 (1)
0, 1, 2, 3, ..., k-2, , k, ..., n-1 // 除去第k人,即除去序号为k-1的人 (2)
k, k+1, ..., n-1, 0, 1, ..., k-2// 以序号k为起始,从k开始报0 (3)
0, 1, ..., n-k-1, n-k, n-k+1, ..., n-2 // 作编号转换,此时队列为n-1人 (4)
变
换后就完完全全成为了(n-1)个人报数的子问题,注意(1)式和(4)式,是同一个问题,不同的仅仅是人数。比较(4)和(3),不难看
出,0+k=k, 1+k=k+1, ... ,(3)式中'0'后面的数字,((n-3)+k)%n=k-3,((n-2)+k)%n=k-2,
对于(3)式中'0'前面的数字,由于比n小,也可看作(0+k)%n=k, (1+k)%n=k+1, 故可得出规律:
设(3)中某一数为x' , (4)中对应的数为x,则有:x'=(x+k)%n.
设x为最终留下的人序号时,队列只剩下1人时,显然x=0; 此时可向前回溯至2人时x对应的序号,3人时x对应的序号……直至n人时x的序号,即为所求。
#include stdio.h
int main()
{
int n,m,s=0;
scanf("%d%d",n,m);
for (int i=2;i=n;++i)
{s=(s+m)%i;
printf("%d\n",s+1);}
return 0;
}
C语言:10人围一圈,1到8循环报数,报数为8的出圈到圈中剩一人为止按退出次序输出出圈人原来的号
#include stdio.h
int main(void)
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", n, m);
for (i=2; i=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
说明:只要输入N=10,M=8即可满足你的要求 还可以有其他变化 其中n为总人数 M为报数最大值
C语言有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数)凡报到3的人退出圈子麻烦注释下代码
#includelt;stdio.hgt;
#define N 5//人数
void main()
{
int a[N]={0},i=0,out_n=0,call_n=0,*p;
p=a;
while(1){//循环报数
if(*p==0){//如果健在
if(out_n==(N-1))break;//如果仅剩一人
call_n++;//报数
call_n%=3;//最大为3,到了3就从0开始
if(call_n==0){*p=1;out_n++;}//为0(即3)出局
}
p++;if(p==a+N)p=a;//循环转向下一人
}
printf("最后剩余者的编号是:%d\n",p+1-a);
}
扩展资料:
printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。
函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。
printf()函数的调用格式为:
printf("lt;格式化字符串gt;",lt;参量表gt;);
其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
规定符
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x,%X无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g把输出的值按照%e或者%f类型中输出长度较小的方式输出
%p输出地址符
%lu 32位无符号整数
%llu 64位无符号整数
网站栏目:c语言报数出圈函数PTA 圆圈报数c语言函数
文章起源:http://azwzsj.com/article/doihiee.html