| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3717 人关注过本帖
标题:13 个人围成一圈,从第一个人开始顺序报号 1 、 2 、 3,凡是报到 3 的人退 ...
只看楼主 加入收藏
gnaagnaw
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2014-6-8
收藏
 问题点数:0 回复次数:3 
13 个人围成一圈,从第一个人开始顺序报号 1 、 2 、 3,凡是报到 3 的人退出圈子。最后留的人是几号?(链表)
#include <stdio.h>
struct stu
{
    int num;
    int number;
    struct stu *next;
};
main()
{
struct stu a[14],*head,*p;
int i,j=0,k=2,m=0;
for(i=1;i<14;i++)
(a[i].num)=i;
for(i=1;i<14;i++)
(a[i].number)=i;
head=&a[1];
for(i=1;i<13;i++)
(a[i].next)=&a[i+1];
(a[13].next)=0;
p=head;
for(i=1;i<14;i++)
if(i%3==0)
{
(a[i-1].next)=&a[i+1];
(a[i].num)=1;
}
loop: for(i=1;i<14;i++)
{
if((a[i].num)==0)
j=j+1;
if((j+1)%3==0)
{
    p=p->next->next;
    (a[i].num)=k;
}
k=k+1;
for(i=1;i<14;i++)
{
    if(a[i].num==0)
        m=m+1;
}
    if(m!=3)
    goto loop;
    else
    printf("最后一个人是:%d",p->next->next);
}

}



这个错到那里了,想了好半天没想出来。。。求帮助!
搜索更多相关主题的帖子: include number 一个人 
2014-06-08 12:23
gnaagnaw
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2014-6-8
收藏
得分:0 
#include <stdio.h>
struct stu
{
    int num;
    int number;
    struct stu *next;
};
main()
{
struct stu a[14],*head,*p;
int i,j=0,k=2,m=0;
for(i=1;i<14;i++)
(a[i].num)=i;
for(i=1;i<14;i++)
(a[i].number)=i;
head=&a[1];
for(i=1;i<13;i++)
(a[i].next)=&a[i+1];
(a[13].next)=0;
p=head;
printf("%d",p->next->next->number);
}
这个是没问题的,但是判断和筛选的那一段有错误,找了半天了。。。找不到啊= =!
2014-06-08 12:45
gnaagnaw
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2014-6-8
收藏
得分:0 
/*loop:*/ for(i=1;i<14;i++)
{
if((a[i].num)==0)
j=j+1;
if((j+1)%3==0)
{
    for(n=i+1;n<14;n++)
        if(a[n].num==0)
                for(z=n+1;z<14;z++)
               if(a[z].num==0)
                   a[i].next=&a[z];
                   a[n].num=k;

            
}
}
k=k+1;
彻底让链表搞晕了,这又是怎么回事,想了个新的方式,结果却指向了13.。。
2014-06-08 13:32
gnaagnaw
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2014-6-8
收藏
得分:0 
#include <stdio.h>
  struct stu
  {
    int num;
    int number;
    struct stu *next;
  };
main()
{
  struct stu a[14],*head,*p;
  int i,j=0,k=1,m=0,x=3,y=2,n,z;
  for(i=1;i<14;i++)
    (a[i].num)=0;
  for(i=1;i<14;i++)
    (a[i].number)=i;
  head=&a[1];
  for(i=1;i<13;i++)
    (a[i].next)=&a[i+1];
  (a[13].next)=0;
  p=head;
  for(i=1;i<14;i++)
    if(i%3==0)
    {
     (a[i-1].next)=&a[i+1];
     (a[i].num)=1;
    }
loop: for(i=1;i<14;i++)
  {
     if((a[i].num)==(k-1))
     j=j+1;
     if((j+1)%3==0)
     {
        for(n=i+1;n<14;n++)
        {
            if(a[n].num==(k-1))
            {
                for(z=n+1;z<14;z++)
                   if(a[z].num==(k-1))
                   {
                     a[i].next=&a[z];
                     break;
                   }
                   a[n].num=k+1;
            }
            break;
        }
            
     }
  }
  k=k+1;
for(i=1;i<14;i++)
{
    if((a[i].num)==0)
        m=m+1;
}
    if(m>3)
    goto loop;
    else
    printf("%d",p->next->next->number);
}
各位大神们,快要搞疯了
2014-06-08 14:49
快速回复:13 个人围成一圈,从第一个人开始顺序报号 1 、 2 、 3,凡是报到 3 的 ...
数据加载中...
 
   



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

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