/* 目的:模拟猴子选大王 时间:2014.1.21 */ #include <stdio.h> #include <malloc.h> #include <string.h> int main() { int n, m, t, i, j; int *p; while(~scanf("%d%d", &n, &m),m||n) { p = (int*)malloc(sizeof(int)*(n+1)); memset(p,0,sizeof(int)*(n+1)); t = n;//t用来判断当前的猴子的数目 j = 0;//从j = 1 开始判断,for循环中有j++,一定要先判断,否则很麻烦 i = 0;//用来统计是否是第m号猴子用来排除猴子 for(;t>1;t--)//每次找到一个猴子进行排除 { for(;i<m;) { j++; if(j == n + 1) j = 1; if(p[j]==0) i++; } //找到要排除的猴子位置 p[j] = 1; i= 0; } for(i = 1;i <= n;i ++) { if(p[i] == 0) { printf("%d\n", i); break; } } } return 0; } /* ------------------ 6 2 思路1.就是模拟,刚开始全部初始为0,被排除掉就变为1,剩下的为0的即为大王 5 2.如果一个变量在以下的代码中还会再用到,那就需要一个副本,如n 12 1 12 12 4 1 8 3 7 ------------------ */
原文:http://blog.csdn.net/z_x_b5/article/details/18616285