zoukankan      html  css  js  c++  java
  • 约瑟夫问题

    约瑟夫问题

    输入一个由随机数组成的数列(数列中每个数均是大于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。

    要求实现函数:

    void array_iterate(int len, int input_array[], int m, int output_array[])

    【输入】 int len:输入数列的长度;

    int intput_array[]:输入的初始数列

    int m:初始计数值

    【输出】 int output_array[]:输出的数值出列顺序

    【返回】 无

    示例:

    输入:int input_array[] = {3,1,2,4},int len = 4, m=7

    输出:output_array[] = {2,3,1,4}

     1 #include<stdio.h>
     2 void array_iterate(int len, int input_array[], int m, int output_array[])
     3 {
     4     int i,j,*x,cur,k;
     5     x = new int[len+1];
     6     for (i=0; i < len; i++)
     7         x[i] = 1;
     8     cur = 0;
     9     k = 0;
    10     for (i=0; i < len; i++)
    11     {
    12         j = -1;
    13         printf("cur start: %d ",cur);
    14         printf("m: %d
    ",m);
    15         while (true)
    16         {
    17             if (x[cur%len]) j++;
    18             if (j == m-1)
    19             {
    20                 x[cur%len] = 0;
    21                 int t = input_array[cur%len];
    22                 output_array[k++] = t;
    23                 m = t;
    24                 cur = cur % len + 1;
    25                 break;
    26             }
    27             cur++;
    28         }
    29     }
    30 }
    31 int main()
    32 {
    33     int len, input[100],output[100],m;
    34     scanf("%d%d",&len,&m);
    35     for (int i=0; i < len; i++)
    36         scanf("%d",&input[i]);
    37     array_iterate(len,input,m,output);
    38     for (int i=0; i < len; i++)
    39         printf("%d ",output[i]);
    40     printf("
    ");
    41     return 0;
    42 }

  • 相关阅读:
    HTML目录
    Java目录
    高级Swing——列表
    Java Web目录
    mongodb目录
    MySQL目录
    基于C++11的线程池
    数据库架构的演变
    cocos2dx-3.0(14)------SpriteBatchNode与SpriteFrameCache加快渲染
    cocos2d-x 托付模式的巧妙运用——附源代码(一)
  • 原文地址:https://www.cnblogs.com/george-cw/p/3938100.html
Copyright © 2011-2022 走看看