国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++ 中約瑟夫環(huán)替換計(jì)數(shù)器m(數(shù)組解決)

2020-01-26 14:10:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C++ 中約瑟夫環(huán)替換計(jì)數(shù)器m(數(shù)組解決)

題目描述:

輸入一個(gè)由隨機(jī)數(shù)組成的數(shù)列(數(shù)列中每個(gè)數(shù)均是大于0的整數(shù),長(zhǎng)度已知),和初始計(jì)數(shù)值m。從數(shù)列首位置開(kāi)始計(jì)數(shù),計(jì)數(shù)到m后,將數(shù)列該位置數(shù)值替換計(jì)數(shù)值m,并將數(shù)列該位置數(shù)值出列,然后從下一位置從新開(kāi)始計(jì)數(shù),直到數(shù)列所有數(shù)值出列為止。如果計(jì)數(shù)到達(dá)數(shù)列尾段,則返回?cái)?shù)列首位置繼續(xù)計(jì)數(shù)。請(qǐng)編程實(shí)現(xiàn)上述計(jì)數(shù)過(guò)程,同時(shí)輸出數(shù)值出列的順序

比如:

輸入的隨機(jī)數(shù)列為:3,1,2,4,初始計(jì)數(shù)值m=7,從數(shù)列首位置開(kāi)始計(jì)數(shù)(數(shù)值3所在位置)
第一輪計(jì)數(shù)出列數(shù)字為2,計(jì)數(shù)值更新m=2,出列后數(shù)列為3,1,4,從數(shù)值4所在位置從新開(kāi)始計(jì)數(shù)
第二輪計(jì)數(shù)出列數(shù)字為3,計(jì)數(shù)值更新m=3,出列后數(shù)列為1,4,從數(shù)值1所在位置開(kāi)始計(jì)數(shù)
第三輪計(jì)數(shù)出列數(shù)字為1,計(jì)數(shù)值更新m=1,出列后數(shù)列為4,從數(shù)值4所在位置開(kāi)始計(jì)數(shù)

最后一輪計(jì)數(shù)出列數(shù)字為4,計(jì)數(shù)過(guò)程完成。

輸出數(shù)值出列順序?yàn)椋?,3,1,4。

要求實(shí)現(xiàn)函數(shù):

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

【輸入】 int len:輸入數(shù)列的長(zhǎng)度;
               int intput_array[]:輸入的初始數(shù)列
               int m:初始計(jì)數(shù)值

【輸出】 int output_array[]:輸出的數(shù)值出列順序

【返回】 無(wú)

示例:

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

解題思路:

每次出列一個(gè)數(shù)值,需要對(duì)m、input_array、output_array、輸出位置outPos、起始位置startPos進(jìn)行更新;

對(duì)于輸出位置outPos的計(jì)算是關(guān)鍵!通過(guò)分析可知,outPos=(startPos+m-1)%num

#include <stdio.h>  void print_array(int len, int array[])  {    for(int i=0; i<len; i++)      printf("%d ", array[i]);    printf("/n");  }    void array_iterate(int len, int input_array[], int m, int output_array[])  {    int startPos=0;    int outPos;    int nIter=len-1;    int num=len;    for(; nIter>=0; nIter--)    {      outPos=(m+startPos-1)%num;//難點(diǎn),計(jì)算輸出的位置      m=input_array[outPos];      startPos=outPos;      printf("outPos is %d, m變?yōu)?%d/n", outPos, m);      output_array[len-nIter-1]=m;      for(int i=outPos; i<num-1; i++)        input_array[i]=input_array[i+1];      num--;      print_array(num, input_array); //輸出每次刪除后的數(shù)列    }  }  void main()  {    int input_array[]={3,1,2,4};    int output_array[4]={0};    array_iterate(4, input_array, 7, output_array);    printf("出列順序?yàn)?n");   print_array(4, output_array); //最后輸出output_array }  

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广饶县| 神农架林区| 易门县| 山西省| 娱乐| 吉隆县| 宜昌市| 万山特区| 翁牛特旗| 临沂市| 迭部县| 南投市| 三河市| 南京市| 巴楚县| 嘉黎县| 梁河县| 富裕县| 宁德市| 出国| 水富县| 句容市| 台安县| 木里| 会同县| 砀山县| 皮山县| 永清县| 什邡市| 翁源县| 祥云县| 小金县| 来宾市| 永仁县| 凤冈县| 句容市| 桓台县| 临潭县| 锡林浩特市| 合肥市| 台安县|