c语言 帮我修改一个 关于 约瑟夫环 的 代码

来源:百度知道 编辑:UC知道 时间:2024/06/30 02:29:41
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{int a[8]={1,2,3,4,5,6,7,8};
int i=0,j=0;
int k;
int m;
m=0;
while(m!=1){

for(k=0;k<=8;k++)
if(a[k]!=0)
m++;

i++;
j++;
if(i=3)
{j=0;a[j]=0;}
if(j>8)
j=0;

}

for(k=0;k<=8;k++)
{
if(a[k]!=0)
printf("%d",a[k]);
}

system("PAUSE");
return 0;
}
问题是
1,2,3,4,5,6,7,8 组成一个环
从第一个数开始数
隔3个数就拿出来
直到就剩最后一个数

最后输出 剩下的最后一个数

这个代码是错的 !!
按这个改

要改成那样的

这是我好几年前刚学C语言的时候写的,还以为丢掉了,不过又找到了。呵呵,刚才运行了一下,能跑。我用VC,Borland C++, 和GNU 三个编译器都试了下,结果VC和Borland可以通过,GNU不行(原因是delete函数有名字冲突,换个名字就可以了)。看来以前写的程序移植性还是很差的。不过既然那两大编译器都能通过,估计能满足你的要求了。

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct node)

struct node
{
int num;
int key;
struct node *next;
};

struct node *creat(int n)
{
struct node *head;
struct node *p1,*p2;
int i;

head=p2=(struct node*)malloc(LEN);
head->num=1;

printf("Please input Person1's key:");
scanf("%d",&head->key);
printf("\n");

for(i=2;i<=n;i++)
{
p1=(struct node*)malloc(LEN);
p1->num=i;

printf("Please intput Person%d's key:",i);
scanf("%d",&p1->key);
printf("\n");

p2