zoukankan      html  css  js  c++  java
  • 《C语言程序设计》9.6

    题目:

    13个人围城一圈,从第一个人开始顺序报号1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。


    解析:

    由题意得,所有人会一个个退出,让求最后留下来的那个人,可以想到让退出的人记上一个标记,转完一圈圈后,只会留一个人,然后遍历所有人,没被标记的则是最后留在圈子中的人。

    实现:代码如下

    #include <stdio.h>
    #include <stdlib.h>
    #define N 13
    struct person
    {
        int number;
        int nextp;
    }link[N+1];
    void CreastLink(struct person link[]);
    int main()
    {
        int b=0,k,j,i;//b(退出的人数),k(1,2,3),j(当前处理的结点号)
        CreastLink(link);
        j=N;
        while((N-b)>1)//因为要一圈圈的报数,一个个标记所以想到while循环,循环必定有跳出循环的条件,也就是要等圈内只有一个人就停止即(N-b)>1
        {
            k=0;
            while(k!=3)
            {
                j=link[j].nextp;//指向下一个结点
                if(link[j].number)
                    k++;
            }
            link[j].number=0;
            b++;
        }
        for(i=1;i<=N;i++)
        {
            if(link[i].number)
                printf("%d",link[i].number);
        }
        return 0;
    }
    void CreastLink(struct person link[])
    {
        int i;
        for(i=1;i<=N;i++)
        {
            link[i].number=i;
        }
        for(i=1;i<=N;i++)
        {
            if(i==N)
            {
                link[i].nextp=1;
            }
            else
            {
                link[i].nextp=i+1;
            }
        }
        return;
    }
    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    nova 注入adminpass 添加用户等设置
    mysql 集群 avc error
    openstack novnc console haproxy mitaka
    NFS金陵科技学院
    windows下命令行格式化U盘
    linux下安装mysql
    连表查询
    查询语句
    索引
    插入,更新与删除数据
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6441892.html
Copyright © 2011-2022 走看看