• 华为机考--约瑟夫问题


    问题描述:    
    输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如:
    输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
    第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数
    第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数
    第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数
    最后一轮计数出列数字为4,计数过程完成。
    输出数值出列顺序为:2,3,1,4。

    采用循环链表的方式实现:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 struct NODE{
     5     int num;
     6     NODE *next;
     7 };
     8 
     9 
    10 int main()
    11 {
    12     char s[50];
    13     int m;
    14     NODE *pNew=NULL,*pHead=NULL,*pRear=NULL,*pTemp=NULL;;
    15     int i;
    16     while(cin>>s>>m)
    17     {
    18         for (i=0;s[i];i++)
    19         {
    20             pNew=new NODE;
    21             pNew->num=s[i]-'0';
    22             if (i==0)
    23             {
    24                 pHead=pRear=pNew;
    25             } 
    26             else
    27             {
    28                 pRear->next=pNew;
    29             }
    30             pNew->next=NULL;
    31             pRear=pNew;
    32         }
    33         pRear->next=pHead;
    34         for (i=0;i<s[i];i++)
    35         {
    36             pTemp=pHead;
    37             for (int i=1;i<m;i++)
    38             {
    39                 pTemp=pHead;
    40                 pHead=pHead->next;
    41             }
    42             pTemp->next=pHead->next;
    43             m=pHead->num;
    44             pHead=pTemp->next;
    45             cout<<m;
    46         }
    47         cout<<endl;
    48     }
    49     return 0;
    50 }

    运行结果:

  • 相关阅读:
    【转】构建高性能WEB站点之 吞吐率、吞吐量、TPS、性能测试
    【计算机二级Java语言】卷015
    【计算机二级Java语言】卷014
    【计算机二级Java语言】卷013
    【计算机二级Java语言】卷012
    【计算机二级Java语言】卷011
    【计算机二级Java语言】卷010
    【计算机二级Java语言】卷009
    【计算机二级Java语言】卷008
    【计算机二级Java语言】卷007
  • 原文地址:https://www.cnblogs.com/LiuYujie/p/3964744.html
Copyright © 2020-2023  润新知