- 相關(guān)推薦
華為校園招聘上機題目約瑟夫問題
問題描述:
輸入一個由隨機數(shù)組成的數(shù)列(數(shù)列中每個數(shù)均是大于0的整數(shù),長度已知),和初始計數(shù)值m。從數(shù)列首位置開始計數(shù),計數(shù)到m后,將數(shù)列該位置數(shù)值替換計數(shù)值m,并將數(shù)列該位置數(shù)值出列,然后從下一位置從新開始計數(shù),直到數(shù)列所有數(shù)值出列為止。如果計數(shù)到達數(shù)列尾段,則返回數(shù)列首位置繼續(xù)計數(shù)。請編程實現(xiàn)上述計數(shù)過程,同時輸出數(shù)值出列的順序比如:
輸入的隨機數(shù)列為:3,1,2,4,初始計數(shù)值m=7,從數(shù)列首位置開始計數(shù)(數(shù)值3所在位置)
第一輪計數(shù)出列數(shù)字為2,計數(shù)值更新m=2,出列后數(shù)列為3,1,4,從數(shù)值4所在位置從新開始計數(shù)
第二輪計數(shù)出列數(shù)字為3,計數(shù)值更新m=3,出列后數(shù)列為1,4,從數(shù)值1所在位置開始計數(shù)
第三輪計數(shù)出列數(shù)字為1,計數(shù)值更新m=1,出列后數(shù)列為4,從數(shù)值4所在位置開始計數(shù)
最后一輪計數(shù)出列數(shù)字為4,計數(shù)過程完成。
輸出數(shù)值出列順序為:2,3,1,4。
要求實現(xiàn)函數(shù):
void array_iterate(int len, int input_array[], int m, int output_array[])
【輸入】 int len:輸入數(shù)列的長度; int intput_array[]:輸入的初始數(shù)列;int m:初始計數(shù)值
【輸出】 int output_array[]:輸出的數(shù)值出列順序
【返回】 無
示例:
輸入:int input_array[] = {3,1,2,4},int len = 4, m=7
輸出:output_array[] = {2,3,1,4}
問題分析:模擬一個環(huán)形的回路,最容易想到的是循環(huán)隊列。用一維數(shù)組來模擬循環(huán)隊列。復(fù)雜一點的可以采用循環(huán)單鏈表進行模擬。
本題采用數(shù)組模擬循環(huán)隊列,關(guān)鍵的問題在于如何確定節(jié)點位置。endIndex = (startIndex+m-1)%len;
實現(xiàn)如下:
void array_iterate(int len, int input_array[], int m, int output_array[]){ if(len<1 || input_array==NULL || m<1 ||output_array ==NULL)return; int startIndex =0; int endIndex; int outIndex=0; while(len) { endIndex = (startIndex+m-1)%len; //找出移除元素的位置 m = input_array[endIndex ]; output_array[outIndex++] = input_array[endIndex]; //刪除endIndex位置的元素,將其后的元素向前移動 for(int i=endIndex;iinput_array[i] = input_array[i+1]; --len; //從移除元素的下一個元素開始循環(huán) startIndex = endIndex; }}
[華為校園招聘上機題目約瑟夫問題]相關(guān)文章:
【華為校園招聘上機題目約瑟夫問題】相關(guān)文章:
關(guān)于華為春季校園招聘的問題07-12
關(guān)于華為招聘的問題07-11
華為招聘問題07-11
華為社會招聘的待遇問題07-11
關(guān)于華為校園招聘!07-11
校園招聘的問題07-12
華為招聘技術(shù)人員筆試題目07-11
請問華賽(華為賽門鐵克)招聘的問題07-11
關(guān)于華為招聘的一個問題07-11