2746:约瑟夫问题(猴子选大王)

来源:互联网 发布:dos 重置网络协议 编辑:程序博客网 时间:2024/05/17 06:10

点击打开链接

/*目的:模拟猴子选大王时间: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的即为大王 52.如果一个变量在以下的代码中还会再用到,那就需要一个副本,如n 12 11212 418 37------------------*/ 


0 0
原创粉丝点击