题目描述
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;
}