约瑟夫问题(Joseph)
2016-10-09 21:18
246 查看
约瑟夫问题(Joseph)
每数到M将此同学从圈中拉走, 求最后被拉走的同学的编号
[align=left]输入[/align]
两个正整数,分别为N和M。0<N<=100 ;0<M<65535
[align=left]输出[/align]
一个正整数,为最后被拉走的同学的编号,最后输出回车
[align=left]输入样例[/align]
5 3
[align=left]输出样例[/align]
4
[align=left]提示[/align]
[align=left]来源[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
#include <stdio.h> int main() { // 假设k=l为报到计数单位量 int i,k,m,n,num[50],*p,l; scanf("%d %d",&n,&l); p=num; for(i=0;i<n;i++) *(p+i)=i+1;//以1至n为序给每个人编号 i=0;//i为每次循环时计数变量 k=0;//k为按1,2,3...l报数时的计数变量 m=0;//m为退出人数 while (m<n-1)//当退出人数比n-1少时执行循环体 { if(*(p+i)!=0) k++; if (k==l) { //可以将每次出局的人编号依次输出来 //printf("出局人序号:%d\n",*(p+i)); *(p+i)=0;//将退出的人的编号置为0 k=0;//k报到l后,重置为0 m++;//退出的人数+1 } i++; if (i==n) i=0;//报数到尾后,i恢复为0 } while (*p==0) p++;//如果p所指向的值等于0.那么就执行p++让它指向下一个元素,直到不为0. //printf("最后留下的人的编号是:%d\n",*p);//经过上面的循环后,*p的指向的编号就是最后留下的人 printf("%d\n",*p); return 1; }
相关文章推荐
- POJ1012 Joseph 约瑟夫问题+枚举
- 一步一步求解约瑟夫(Joseph)问题
- PKU1012 Joseph 约瑟夫问题
- 算法题-约瑟夫(Joseph)问题求解
- 1012-Joseph 约瑟夫问题
- (2011.11.20)02_循环链表举例_约瑟夫(Joseph)环问题.cpp
- poj 1012 Joseph (约瑟夫问题)
- 约瑟夫循环问题uva305 Joseph
- [JAVA练习] Josephu 约瑟夫问题
- poj 1012 Joseph 约瑟夫问题 (★★☆☆☆)
- uva305 - Joseph 约瑟夫问题变形
- POJ 1012 && HDU 1443 Joseph(约瑟夫问题)
- 《剑指offer》:[45]圆圈中最后剩下的数字(约瑟夫(Josephuse)环问题)
- POJ 1012 Joseph 约瑟夫问题
- POJ-1012 Joseph-约瑟夫问题好人坏人
- 1012 Joseph 约瑟夫问题 总结了一个公式 n人报m第t轮出列的人的编号(从0到n-1)
- 约瑟夫(Joseph)问题
- poj 1012 Joseph (约瑟夫问题)
- 算法: 约瑟夫问题(Joseph Problem)的分析
- 约瑟夫问题