• 有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);

  • 相关阅读:
    Javascript中怎么定义类(私有成员、静态成员)?
    Web前端国内的叫法与行业归类吗
    CSS hack,CSS简写,CSS定义应注意的几个问题
    7个在IE和Firefox中不同的JavaScript语法
    IE和Firefox中的事件
    IE8的css hack /9
    CSS hack
    运行,复制,保存,runCode,copyCode,saveCode,运行代码框
    自由使用层的叠加
    WordPress自定义URL的Rewrite规则
  • 原文地址:https://www.cnblogs.com/Camilo/p/3365691.html
Copyright © 2020-2023  润新知