int josephus(int n, int m) { int monkeys[300]; // 定义足够大的数组来存放猴子状态,假设最多300只猴子,可根据实际情况调整大小 for (int i = 0; i < n; i++) { monkeys[i] = i + 1; // 初始化猴子编号,从1开始 } int count = n; // 剩余猴子数量 intindex = 0; // 当前报数位置索引 int num = 0; // 当前报数数字
while (count > 1) { if (monkeys[index] > 0) { num++; if (num == m) { monkeys[index] = -1; // 将报到m的猴子标记为已淘汰(这里用 -1 标记) num = 0; count--; } } index++; //轮到下一个猴子报数。 if (index == n) { //索引越界时重置为0 index = 0; } }
for (int i = 0; i < n; i++) { if (monkeys[i] > 0) { return monkeys[i]; // 返回剩下猴子的编号,也就是猴王编号 } } return -1; // 正常情况不会执行到这里,只是为了语法完整性 }
int main() { int n, m; while (scanf("%d %d", &n, &m)!= EOF && (n!= 0 || m!= 0)) { int result = josephus(n, m); printf("%d\n", result); } return0; }
intmain(){ int n, k; scanf("%d %d", &n, &k); int image[MAX_SIZE][MAX_SIZE]; // 存储原始图像像素信息的二维数组
// 读取原始图像像素信息 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &image[i][j]); } }
// 按照倍数放大图像并输出 for (int row = 0; row < n * k; row++) { for (int col = 0; col < n * k; col++) { int originRow = row / k; int originCol = col / k; printf("%d ", image[originRow][originCol]); } printf("\n"); }