解题思路:
用链表存储人员编号,存储每个人的上个人fa[i]以及下个人ne[i]
注意事项:
fa[1]=n,ne[n]=1; 第一个人的上个人是第n个,第n个人的下一个是第一个
参考代码:
#include<iostream> using namespace std; const int N=110; int n,m; int fa[N],ne[N]; void add(int t,int k) { if(t==m) //数数t等于m时,开始进行输出与删除操作 { t=0; //从新开始计数 n--; //人数减一 //删除此人(类似双链表操作) ne[fa[k]]=ne[k]; fa[ne[k]]=fa[k]; cout<<k<<' '; if(!n) return; } add(t+1,ne[k]); } int main(void) { cin>>n>>m; for(int i=1;i<=n;i++) { if(i==1) //第一个人的上一个是第n个 fa[i]=n; else fa[i]=i-1; if(i==n) //第n个人的下一个是第一个 ne[i]=1; else ne[i]=i+1; } int t=0; add(t+1,ne[n]); //ne[n]=1;从第一个开始,该写法方便快捷 return 0; }
0.0分
1 人评分
A+B for Input-Output Practice (VII) (C++代码)浏览:643 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:569 |
简单的a+b (C语言代码)浏览:619 |
C语言训练-大、小写问题 (C语言代码)浏览:719 |
简单的a+b (C语言代码)浏览:857 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:1109 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:672 |
【计算球体积】 (C语言代码)浏览:1619 |
【出圈】 (C++代码)简单循环浏览:700 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:538 |