5 条题解
-
2
//1996ms //用队列解决 #include<stdio.h> #include<queue> using namespace std; int main() { int t; scanf("%d",&t); while(t--){ int m,x,w;//m人数,x目标数,w用来存放数列第一个数 scanf("%d%d",&m,&x); queue <int> s;//定义数列s for(int i=1;i<=m;i++){ s.push(i);//将每个人放入队列 } for(int i=1;;i++){ int num=s.size();//检测队列中人数 if(i%x==0){//每当向下进行到第x个人,将他删去 s.pop(); } else{ w=s.front();//核心:非第x个时将前方的人逐个从末尾压入队列 s.pop(); s.push(w); } if(num==1){//当队列仅剩一人输出 break; } } int ed=s.front();//输出最后剩余的1个 "幸存者" printf("%d\n",ed); } return 0; }
-
2
直接从最后一个人逆向往回筛。
#include <stdio.h> int main() { int t; scanf("%d",&t); while (t--) { int m,n,i,a=0; //m是人数,i是剩余人数,n是报号 scanf("%d %d", &m, &n); for (i = 1; i <= m; i++) { a = (a + n) % i;//从零开始记录每次过滤报号的人数,不能大于当前剩余人数 //当i==m时,逆着看就是每次都在去除一次报号n的人,直到把人数筛的没有人 //那再多一个人就是剩下的人了 } printf("%d\n", a + 1); } return 0; }
-
0
include<iostream> using namespace std; int main() { int n; cin>>n; while(n--) { int x,m; cin>>m>>x; int a[m+1]; for(int i=1;i<=m;i++) { a[i] = i; } int end = m;//用于控制和观察数组中不为零的个数 int j = 1; int sum = 0; while(end!=1) { if(j==m+1) { j=1;//保持循环; } if(a[j]>0) { sum++;//判断数组中大于零的数的个数,就是没被剔除的数的个数 } if(sum == x) { a[j]=0; end--; sum = 0; } j++; } for(int i=1;i<=m;i++) { if(a[i]>0) { cout<<a[i]<<endl; } } }
-
0
#include<stdio.h> int a[10000]; int main() { int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d %d",&n,&m);//n=6 m=4 int j=1,i=0; int k=n; for(int l=0;l<n;l++) a[l]=0; while(1) { if(a[i%n]>=0) a[i%n]=j; if(j==m&&a[i%n]>=0) { a[i%n]=-1; j=1; k--; }//printf("%d %d\n",i%n+1,a[i%n]); if(a[i%n]>=0) j++; i++; if(k==1) break; } for(int i=0;i<n;i++) { if(a[i]>=0) printf("%d\n",i+1); } } }
-
0
#include <stdio.h> int main() { int n,m,x; scanf("%d",&n); while(n--) { scanf("%d%d",&m,&x); int p[m],c=0,count,M=m; for (int i=0;i<m;i++) p[i]=i+1;//每个人报的数 while (m>1) { count=0;//被筛掉的人的数量 for(;count<x;) { if (p[c]!=0) count++; if(count==x) {p[c]=0;m--;}//等于0则被筛掉 c=(c+1)%M; } } int i=0; while(p[i]==0) i++;//求没有被筛的人的位置 printf("%d\n",p[i]); } return 0; }
- 1
信息
- ID
- 198
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 325
- 已通过
- 160
- 上传者