5 条题解
-
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; }
信息
- ID
- 198
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 325
- 已通过
- 160
- 上传者