zoukankan      html  css  js  c++  java
  • 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    先写我的思路,没有用指针的做法。如果你用的是VC,把第六行去掉。

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        setvbuf(stdout,NULL,_IONBF,0);
        int n,num;             //n为总人数,num为剩余人数。
        int a[255]={0};        //用0标记此位置有人,若此位置的人退出,则该位置的值为1
        int i;
        int flag=0;            //flag为报数
     
        printf("How many people?");
        scanf("%d",&n);
        num=n;                //剩余人数初始为n
     
        while(num!=1)         //剩余人数为1时,停止循环
        {
            for(i=0;i<n;i++)
            {
                if(a[i]==0)    //若该位置有人,就报数
                    flag++;
                if(flag==3)    //若报数为3,此人退出
                {
                    flag=0;
                    a[i]=1;
                    num--;
                }
     
            }
        }
     
        for(i=0;i<n;i++)      //遍历数组,第一个值为0的位置处就是剩余的人了
        {
            if(a[i]==0)
            {
                printf("The remaining person is NO.%d.",i+1);
                //数组的序号从0算起,而人的编号从1算起,所以有+1的修正
                break;
            }
        }
        return EXIT_SUCCESS;
    }
    

     参考答案的算法基本和我的差不多

    区别有:

    1 每个位置上刚开始赋值为每个人的编号1-n,有人退出后,该人的位置赋值为0;

    2 把每个用数组形式表示的a[i]转换为*(p+i),p当然事先定义并赋值为p=a,不过这个区别不是很大哈。

    最后一个循环可以用while来实现,很是简洁:

      i=0;

      while(a[i]==1)

        i++;

      printf("The remaining person is NO.%d.",i+1);

  • 相关阅读:
    查看mysql数据库引擎
    crontab 从nano 转换为 vim
    Linux中,去掉终端显示的当前目录的绝对路径
    nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)
    rabbitmq 配置
    OSError: mysql_config not found
    No module named 'ConfigParser'
    windows 安装tensorflow
    微服务架构设计
    centOS rabbitmq 安装
  • 原文地址:https://www.cnblogs.com/Camilo/p/3365691.html
Copyright © 2011-2022 走看看