c语言一问

[复制链接]
查看11 | 回复1 | 2010-9-6 02:08:33 | 显示全部楼层 |阅读模式
一个算法。就是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我。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行