解题思路:
用链表存储人员编号,存储每个人的上个人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 (C语言代码)浏览:809 |
汽水瓶 (C语言代码)浏览:658 |
高精度加法 (C++代码)(大数加法)浏览:1004 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:686 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2095 |
C语言程序设计教程(第三版)课后习题6.5 (C++代码)浏览:484 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:564 |
三角形 (C语言代码)浏览:964 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:578 |
循环入门练习5 (C语言代码)浏览:893 |