zoukankan      html  css  js  c++  java
  • 几个孩子围成圈报数 当等于3的时候删除 链表实现 最终输出剩下孩子的编号

    这个题目采用的2个指针,链表涉及到删除 通常都会用其中一个指针保存前面的地址 紧跟着

     1 //功能:13个人围成一圈,从第一个人开始顺序报号1、2、3。
     2 //凡报到“3”者退出圈子。找出最后留在圈子里的人原来的序号。
     3 
     4 #include<stdio.h>
     5 #include<stdlib.h>
     6 
     7 #define N 13                    //共13个人
     8 
     9 struct people                    //创建链表
    10 {
    11     int ID;                        //人物序号
    12     struct people *pNext;        //下个元素的地址
    13 };
    14 
    15 typedef struct people PE;
    16 
    17 void init(PE *a, int n);        //输入每个人的信息
    18 
    19 void main()
    20 {
    21     PE a[N];
    22     init(a, N);                    //对人物信息进行初始化
    23 
    24     int total = N;                //剩余人数,初始化为N
    25     int num = 1;                //报数器
    26     PE *p = &a[0];
    27     for (PE*pPrior = &a[N - 1]; total != 1; p = p->pNext)        //是一个圈 pPrior指向当前结点的前一个结点
    28     {
    29         if (num != 3){
    30             num++;
    31             pPrior = pPrior->pNext;                        //前结点向后移一个单位
    32             continue;
    33         }
    34         else
    35         {
    36             pPrior->pNext = p->pNext;                    //删除当前结点
    37             num = 1;
    38             total--;                                    //生剩余人数--,当人数剩余为1时循环结束
    39         }
    40         num++;//因为得往后走了 值前赋值了了1 回到循环向后移动
    41     }
    42     printf("%d", p->ID);
    43     system("pause");
    44 }
    45 
    46 void init(PE a[], int n)
    47 {
    48     for (int i = 0; i < n; i++)
    49     {
    50         a[i].ID = i + 1;            //每个人的编好
    51         if (i != n - 1)
    52         {
    53             a[i].pNext = &a[i + 1];        //将下一个的地址赋给pNext
    54         }
    55         else
    56         {
    57             a[i].pNext = &a[0];            //将序号为1的地址赋给最后一个元素的pNext
    58         }
    59     }
    60 }

  • 相关阅读:
    【09】绝不在构造和析构过程中调用virtual方法
    【08】别让异常逃离析构函数
    C++ 外部调用private方法
    【07】为多态基类声明virtual析构方法
    C++ 构造过程和析构过程
    理解C# Lazy<T>
    DG
    MongoDB
    sh.status()
    DG
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6533325.html
Copyright © 2011-2022 走看看