• C语言——N个人围成一圈报数淘汰问题


    《一》问题描述:

            有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数,

            凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。

            问此人原来的位置是多少号?

    《二》问题解决:

           1.定义数组记录每个编号的状态(是否被淘汰);

           2.在未被淘汰的人中检查是否数到3,若是,淘汰此人;

           3.继续此过程至所有人被淘汰;

    《三》示例代码:

        

           

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 #include <math.h>
     5 #include <string.h>
     6 
     7 #define N 13
     8 
     9 struct MyStruct
    10 {
    11     int num;
    12     int flag;
    13 };
    14 
    15 typedef struct MyStruct people;
    16 
    17 int main()
    18 {
    19 
    20     people a[N];
    21     for (int i = 0; i < N; i++)
    22     {
    23         a[i].num = i;
    24         a[i].flag = 1;
    25     }
    26 
    27     for (int i = 0; i < N; i++)
    28     {
    29         printf("num=%3d,flag=%3d
    ", a[i].num, a[i].flag);
    30     }
    31 
    32     int count = 0;
    33     int i = 0;
    34     int index = 0;
    35     while (count < N-1)
    36     {
    37         while (!a[index].flag)
    38         {
    39             index = (index + 1) % N;
    40         }
    41         i++;
    42 
    43         if (i % 3 == 0)
    44         {
    45             a[index].flag = 0;
    46             count++;
    47             i = 1;
    48         }
    49         index = (index + 1) % N;
    50 
    51     }
    52     
    53     printf("
    ");
    54     i = 0;
    55     int flagnum;
    56     while (i < N)
    57     {
    58         if (a[i].flag)
    59         {
    60             printf("i=%3d,num=%3d,flag=%3d	该数为所求
    ", i, a[i].num, a[i].flag);
    61         }
    62         else
    63         {
    64             printf("i=%3d,num=%3d,flag=%3d
    ", i, a[i].num, a[i].flag);
    65         }
    66         i++;
    67     }
    68     printf("
    ");
    69 
    70     system("pause");
    71 }
    View Code

         

         

           

         

  • 相关阅读:
    高级映射之事务
    配置tomcat-users.xml文件
    动态SQL之标签
    性能测试
    Service
    添加 aar 或 jar 包依赖 的方式
    安卓设备 以太网代理 问题排查
    剑指offer:面试题15、链表中倒数第 K 个结点
    剑指offer:面试题14、调整数组顺序使奇数位于偶数前面
    剑指offer:面试题13、在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/weiyikang/p/5043805.html
Copyright © 2020-2023  润新知