首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我看上 错在哪里了 约瑟夫有关问题

2012-08-07 
帮我看下 错在哪里了约瑟夫问题编译时没有显示错误的了,不知道为什么就是运行不了。。。。帮我看看吧 谢谢了#i

帮我看下 错在哪里了 约瑟夫问题
编译时没有显示错误的了,不知道为什么就是运行不了。。。。帮我看看吧 谢谢了



#include<stdio.h>
#include<malloc.h>
int main()
{
  typedef struct node{
  int data;
  struct node *next;
}LNode,*LinkList;
LinkList p;
LinkList q;
LinkList H;
LinkList pre;

  int i,n,m,s;
H=(LinkList)malloc(sizeof(LNode));
q=H;
printf("请输入n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
   
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
p->data=i;
q->next=p;
q=p;
}
printf("输入你要开始的位置=");
scanf("%d",&s);
for(i=1;i<=s;i++)
p=p->next;
printf("Enter the need number\n");
scanf("%d",&m);
if(m>n) return 0;
while(p!=p->next)
{
  for(i=1;i<=m;i++)
  {
  pre=p;
  p=p->next;
  }
  printf(" %d",p->data);
  pre->next=p->next;
  free(p);
  p=pre->next;
}
printf(" %d\n",p->data);
free(p);
return 1;
}


[解决办法]

C/C++ code
#include<stdio.h>#include<malloc.h>int main(){    typedef struct node{        int data;        struct node *next;    }LNode,*LinkList;    LinkList p;    LinkList q;    LinkList H;    LinkList pre;    int i,n,m,s;    H=(LinkList)malloc(sizeof(LNode));    H->data=1;//第一个节点是1    H->next=NULL;    p=q=H;//        printf("请输入n=");    scanf("%d",&n);    for(i=2;i<=n;i++)//i=1--->i=2,2个节点以上才需要在H在基础上再增加    {            p=(LinkList)malloc(sizeof(LNode));        p->next=NULL;        p->data=i;        q->next=p;        q=p;    }    p->next=H;//需要首尾相连,形成环    printf("输入你要开始的位置=");    scanf("%d",&s);    for(i=1;i<=s;i++)        p=p->next;    printf("Enter the need number\n");    scanf("%d",&m);    if(m>n) return 0;    while(p!=p->next)    {    for(i=1;i<m;i++)//i<=m 改为 i<m,报数从1开始,如果m=1,就不用循环,p直接出来    {        pre=p;        p=p->next;    }    printf(" %d",p->data);    pre->next=p->next;    free(p);    p=pre->next;    }    printf(" %d\n",p->data);    free(p);    return 1;}
[解决办法]
C/C++ code
//假设有n个人团团围做,从第1个人开始数数,数到第m个人时候,第m个人出列,//然后继续从1开始数数,数到第m个人退出#include <stdio.h>#include <conio.h>int i,k,t;int n,m;static char f[1001];//0该座位未出圈,1该座位已出圈void main() {    while (1) {        printf("Input n m(1000>=n>=m>=1):");        fflush(stdout);        rewind(stdin);        if (2==scanf("%d%d",&n,&m)) {            if (1000>=n && n>=m && m>=1) break;        }    }    t=0;//已出圈总人数    i=1;//座位编号    k=1;//当前要数的数    while (1) {        if (0==f[i]) {            if (m==k) {                t++;                f[i]=1;                printf("%3d ",i);                if (0==t%10) printf("\n");                if (t>=n) break;            }            k++;if (k>m) k=1;        }        i++;if (i>n) i=1;    }    cprintf("Press any key ...");    getch();} 

热点排行