题目描述
N 个人围成一圈,编号分别为 1,2,3……N ,第一个人从 1 报数,按照编号顺序依次报数,报 M 的人会离开队伍,
然后下一个人会继续从 1 开始报数,直到剩下一人,剩下的人的编号是多少?
输入
共一行两个数 N 和 M。
输出
输出一个数表示最后一人的编号。
样例输入
7 3
样例输出
4
代码
#include <stdio.h>void last_num(int row[], int n, int m) {int count = 0;int index = 0;int num = n;while (num > 1) {if (row[index] != 0) {count++;if (count >= m) {row[index] = 0;count = 0;num--;}}index++;if (index > n - 1) {index = 0;}}for (int i = 0; i <= n; i++) {if (row[i] != 0) {printf("%d", row[i]);return;}}
}int main() {int n, m;scanf("%d%d", &n, &m);int row[1005] = {0};for (int i = 0; i < n; i++) {row[i] = i + 1;}last_num(row, n, m);return 0;
}