| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 452 人关注过本帖
标题:[求助]奇怪的循环
只看楼主 加入收藏
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[求助]奇怪的循环
题目:这是个关于约瑟夫的问题(当n<=3时无问题,但当n>3是却是死循环,我不知道为什么,请大家帮忙解释一下
),代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{int n,m,i;
int *p,*q;
printf("please input the quantity of elements:");
scanf("%d",&n); //n为你所键入的数的个数
printf("\n");
p=(int *)malloc(sizeof(int)*(n+1)); //分配空间
for(i=0;i<n;i++)
*(p+i)=i+1;
q=p;
i=0;
m=n;
while(n!=1) //问题循环
{
if(q>p+n-1) q=p;
if(*q!=0) i++;
if((i-3)==0) {*q=0;i=0;n--;}
q++;
};
printf("print key is:");
for(i=0;i<m;i++) //输出最后的值
{ if(p[i]==0) continue;
printf("%d\n",p[i]);
}
free(p);
return 0;
}


2006-04-23 22:13
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
以下是引用cxwl3sxl在2006-4-23 22:13:00的发言:
题目:这是个关于约瑟夫的问题(当n<=3时无问题,但当n>3是却是死循环,我不知道为什么,请大家帮忙解释一下
),代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{int n,m,i;
int *p,*q;
printf("please input the quantity of elements:");
scanf("%d",&n); //n为你所键入的数的个数
printf("\n");
p=(int *)malloc(sizeof(int)*(n+1)); //分配空间
for(i=0;i<n;i++)
*(p+i)=i+1;
q=p;
i=0;
m=n;
while(n!=1) //问题循环
{
if(q>p+n-1) q=p; //有问题!
if(*q!=0) i++;
if((i-3)==0) {*q=0;i=0;n--;}
q++;
};
printf("print key is:");
for(i=0;i<m;i++) //输出最后的值
{ if(p[i]==0) continue;
printf("%d\n",p[i]);
}
free(p);
return 0;
}




我的原则很简单:不做不喜欢的事!
2006-04-23 22:45
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 
if(q>p+n-1) q=p; 中的n应该该为m,因为n在变

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-04-23 23:18
快速回复:[求助]奇怪的循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018643 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved