• 《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;
    }
    祝你早日攒够失望,然后开始新的生活。
  • 相关阅读:
    SQL进阶总结(二)
    SQL进阶总结(一)
    Springmvc学习(三)——响应数据和结果视图
    springMVC学习(二)——常用注解
    Springmvc学习(一)——简单入门案例
    Nginx解决前端访问资源跨域问题
    MySQL-安装配置篇
    Centos下的MySQL安装及配置
    关于Java 值传递深度分析
    c#统计代码行数
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/6441892.html
Copyright © 2020-2023  润新知