| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 704 人关注过本帖
标题:链表的应用求解
只看楼主 加入收藏
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
结帖率:95.65%
收藏
已结贴  问题点数:1 回复次数:16 
链表的应用求解
一道C语言编程题。。。想了两天也不知怎么解。题目是:有25个人围成一圈,从第一个人开始顺序报号,凡报到3或3的倍数者推出,知道剩下最后一个人,然后输出此人第一次所报的数字;


我的想法是先创建25个节点将他们链接起来,然后逐个检查节点中的数值,能被三整除的,再free掉,但是不知道如何解决下一轮计数,也就是说,假设1号报1,第一轮结束后它应该报26,而2号报27,4号报28.。。。。
搜索更多相关主题的帖子: 编程 C语言 
2011-09-08 20:09
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
大虾。。。。帮帮我。。。小弟感激不尽

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-08 20:13
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
help。。。

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-08 20:27
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-08 20:54
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:0 
在节点中加一个flag域,二个报数域,一个记录第一次报数,一个记录最后一次报数(大于25的记录在这个域里),一个个数域,记录此次循环剩下的个数。造循环加头链表循环计数。用双指针进行操作,一个指针p先走,遇到flag=1的,指针q=p,p继续,若q的个数域为1,而p指向了头指针,则停止循环。指针q指向的节点即为所求。
2011-09-08 21:32
xd1103121524
Rank: 2
等 级:论坛游民
帖 子:27
专家分:49
注 册:2011-8-29
收藏
得分:0 
#define  N 25
struct student{
    int flag;
    struct student* next;
};

int main()
{
    int i=1;                //循环计数;
    int j=1;
    struct student * head;  //链表的头指针;
    struct student * p;     //建表的临时指针;
    struct student *q;     //前一个指针;
    struct student *end;   //循环中用到;
    int values[N+1]={0};       //记录每一个人第一次报数的数字的值。。

    p=(struct student*)malloc(sizeof(struct student));
    head=p;
    q=p;
    p->flag=i;
    p->next=NULL;
    i++;
    //1建立链表;
    while(i<=N)
    {
        p=(struct student*)malloc(sizeof(struct student));
        p->flag=i;
        p->next=NULL;
        q->next=p;
        q=p;
        i++;
    }
   
    q->next=head;        //组成一个圆圈。。
    end=q;               //循环中用到;
   
    i=25;
    //2循环求解的过程;
    while(i>1)
    {   

        if(values[head->flag]==0)
        {
            values[head->flag]=j;
        }

        if(j%3==0)
        {//删除该节点;
            


            p=head;
            head=head->next;
            end->next=head;
            free(p);
            j=1;
            i--;
        }

        else{
            end=head;
            head=head->next;
            j++;
            
        }
        
    }


    printf("%d\n",values[head->flag]);

    return 0;




}


自己的理解编写的程序,楼主可以自己看看。。。
2011-09-08 22:54
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 6楼 xd1103121524
Wrong

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-08 23:12
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 5楼 qldxsun
如果只用单项链表呢?

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-08 23:13
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-09-09 01:07
xd1103121524
Rank: 2
等 级:论坛游民
帖 子:27
专家分:49
注 册:2011-8-29
收藏
得分:0 
用的本来就是单链表。。而且我也运行过,可以得到正确的答案。。。。
2011-09-09 09:15
快速回复:链表的应用求解
数据加载中...
 
   



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

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