2026/4/6 0:46:37
网站建设
项目流程
专门做简历的网站软件,ps软件手机版下载,网站报价表,做图素材的网站有哪些首先#xff0c;编写一个程序#xff0c;对m个人进行一次计数#xff0c;即排成一行。如果达到出列要求#xff0c;则重新计时。最后输出出列者的编号。#includestdio.h
int main()
{int m,n,i,k;scanf(%d%d,m,n);int f[m];//该数组有m个元素…首先编写一个程序对m个人进行一次计数即排成一行。如果达到出列要求则重新计时。最后输出出列者的编号。#includestdio.h int main() { int m,n,i,k; scanf(%d%d,m,n); int f[m];//该数组有m个元素代表m个人的编号 for(i0;im;i){ f[i]i1;//存储每个人的编号 } k0;//计数器清0 i0;//从第一个人开始计数 while(im){//因为i的取值从0到m-1 k;从第一个人开始数 if(kn){//满足出列条件 printf(%-5d,f[i]);//输出出列者编号 k0;//计数器复位重新开始1计数再碰到符合出列数字的人出列。 } i;//人的编号也要持续1且不用重置 } return 0; }约瑟夫环是实现对m个人的循环计数即数完第m个人后重新回到第一个人继续计数从而模拟m个人围成一圈的效果。即实现约瑟夫环的关键是如何在计数完m个人后回到第1个人。即把i的条件变成i(i1)%m能写出上述公式是因为要在im-2之前仍然是i的效果即余数为除数。但当im-1时即最后一个人数完后重新回到第1个人继续循环即i变成0。但运行之后会发现会无限循环因为i的范围总是满足循环条件。所以要修改循环条件最后剩余不足一个人时即是循环结束的点。所以需要再定义一个变量是剩余人数。同时不要忘了把已经出列的人去掉。#includestdio.h int main() { int m,n,i,k,c; scanf(%d%d,m,n); int f[m];//该数组有m个元素代表m个人的编号 for(i0;im;i){ f[i]i1;//存储每个人的编号 } cm; k0;//计数器清0 i0;//从第一个人开始计数 while(c0){//因为i的取值从0到m-1 if(f[i]!0){//再从下一个人开始计数时就把已经出列的人排除即不数上。 k; } if(kn){ printf(%-5d,f[i]); f[i]0;//出列的人序号清除 c--; k0;//计数器复位重新开始1计数再碰到符合出列数字的人出列。但这里唯一的问题是应该将已经出列的人排除再重新开始计数即返回到第一个人。 } i(i1)%m; } return 0; }