| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 321 人关注过本帖
标题:一个关于出列游戏编程的问题!敬请指点!
只看楼主 加入收藏
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
结帖率:93.75%
收藏
 问题点数:0 回复次数:0 
一个关于出列游戏编程的问题!敬请指点!
092_循环出列.zip (1.54 KB)

程序代码:
/*本程序简介:

 *   编号为1~5的5个人围坐一圈,每人持有的密码为自己的编号,从一号开始循环报数(1~M),报到M的人退出,将他的密码作为新的M值,下一个没退出的人继续从一报数,如此下去,直到所有人全部退出游戏,求出列顺序!

 *正确解是1,2,4,3,5

 *问题:为什么打印出了1,2,4,1,2

 *     找了半天问题没找出来,是设计思路有问题还是编程上的疏漏?在线求解!敬请指点!

 */
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
    int flag;
        int num;
    int mima;
        struct node *next;
}node;
//创建循环单向链表
node *create_list(node *head,int str[],int x)
{
        int i;
    node *p,*q;
    head=(node *)malloc(sizeof(node));
    for(i=0;i<x;i++)
    {
        p=(node *)malloc(sizeof(node));
        p->flag=1;
        p->num=i+1;
        p->mima=str[i];
        p->next=NULL;
        if(i==0)
        {
            head=p;
        }
        else
        {
            q->next=p;
        }
        q=p;
    }
    q->next=head;//循环链表
    return head;
}
int main()
{
    int str[]={1,2,3,4,5};
    node *head=NULL;
    node *p=NULL;
    int x;
    x=sizeof(str)/sizeof(str[0]);
    head=create_list(head,str,x);
    printf("编号:");
    p=head;
    do
    {
        printf("%d ",p->num);
        p=p->next;
    }while(p!=head);
    printf("\n");
    printf("密码:");
    p=head;
    do
    {
        printf("%d ",p->mima);
        p=p->next;
    }while(p!=head);
    printf("\n");
    /*标志为1表示没退出,标志为0表示退出*/
    printf("标志:");
    p=head;
    do
    {
        printf("%d ",p->flag);
        p=p->next;
    }while(p!=head);
    printf("\n");

    /*实现过程如下*/
    p=head;
    int i=1;
    int e=head->mima;//从1号开始循环报数
    do
    {
        if(i==e)//如果报数M
        {
            printf("%d %d\n",p->num,p->mima);//打印退出人的编号和密码
            p->flag=0;//标志置0
            i=1;//i从1开始
            e=p->mima;//密码为退出人的密码
        //    printf("e=%d\n",e);
            x--;//退出
            if(x==0)//如果所有人都退出,结束游戏。
            break;
            p=p->next;
        }
        else
        {
            if(p->flag==1)//没退出的人报数,退出的人不报数
            i++;
            p=p->next;//下一个人
        }
    }while(1);
    return 0;
}
搜索更多相关主题的帖子: 密码 在线 
2012-11-03 12:11
快速回复:一个关于出列游戏编程的问题!敬请指点!
数据加载中...
 
   



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

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