一个算法。就是n个人,几个人一数,数到某数的就出局。比如6个人,两个一数,被数到二的出局。
eg:
1
2
3
4
5
6
数法
一 二 一二 一
二
是“二”的出局,于是变成:
1
3
5
继续
一
二
一
接着上面
1
5
二
一
最后剩余 5
写程序 给定n个数规定每次数几个,求出最后剩余的那个元素。
#include
#include
main()
{
int n,c,i,w,h=0,*p;
printf("输入总数:");
scanf("%d",&n);
w=n;
printf("每次数几个:");
scanf("%d",&c);
p=(int *)malloc(n*sizeof(int));
for(i=0;i1)
{
if(p==-1) {i++;continue;}
h++;
if(h>c) h=1;
if(h==c && p!=-1)
{
p=-1;w=w-1;
}
i++;
if(i>n-1) i=0;
}
printf("剩余者为:");
for(i=0;in-1) i=0;原来的,第二次循环结束时i值变成6,而p[6]值是未知的(肯定不等于-1),然后就执行if(h==c && p!=-1){ p=-1;w=w-1;}w的值就变为1了,当然p[0]的值还是1,所以也被输出了。约瑟夫环问题哈~,应该是不小心的吧,我也是调试下,才找到错误的。有问题交流下,hi我。
|