问题描述:
设有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序 。
程序代码:
#include<iostream>
using namespace std;
int main(){
int n,m,s,f,t;
int a[1000]={0};
cin>>n>>m;
f=0; t=0; s=0;
do {
++t;
if (t==n+1) t=1;
if (a[t]==0) ++s;
if (s==m) {
s=0;
cout<<t<<" ";
a[t]=1;
f++;
}
} while(f!=n);
return 0;
程序分析:
本程序主要采用的是循环算法(蛮力算法、枚举算法等)
本程序代码实现的主要步骤:
-
输入正整数n,m
-
定义初始化变量
-
循环枚举,当t超过n时归为1
-
进行报数的判断和计数
-
输出对应顺序
当n和m在1~100000,程序会超时(1秒)。可以从应用单向链表进行模拟优化。