華為筆試題目 約瑟夫環(Joseph)

2021-04-13 05:01:26 字數 1435 閱讀 6744

測試空間

旗下大頭針

出品

我們班的c語言剛剛學習到第七章,昨天107班的耿**(曾就讀於浙江大學)同學素質相當好,自己寫了乙個約瑟夫環。不過問題挺多的。這個題目非常經典,記得以前001班的陳*(曾就讀於清華大學)同學去華為面試的時候考過這道題目。所以跟大家分享一下。

什麼是約瑟夫環呢?

約瑟夫環問題

[問題描述]

編號是1,2,……,n的n個人按照順時針方向圍坐一圈,每個人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人全部出列為止。設計乙個程式來求出出列順序。

[基本要求]

利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序輸出各個人的編號。此題所用的迴圈鍊錶中不需要「頭結點」,請注意空表和非空表的界限。

[測試資料]

n的初值為3,m=2 ,3個人的密碼依次為3,1,2首先m=則正確的輸出是什麼?

要求:輸入資料:首先輸入待處理人員數及他們的密碼,然後輸入m的初值,建立單迴圈鍊錶。

輸出形式:建立乙個輸出函式,將正確的出列序列輸出

下面是耿啟富一開始所寫的程式:主要問題還是有關記憶體方面的:1.記憶體越界問題。2.野指標問題

#include

#include

typedef struct node *pnode;

struct node ;

typedef struct node *linklist;

bool initlist(linklist *l)//建立乙個空鍊錶

bool makenode( pnode p,int e,int n)//分配由p指向的資料元素為e,編號為n,後繼為空的結點,並返回true,若分配失敗,則返回false;

void deletenode(linklist *l, pnode p)//從鍊錶中刪除p所指向的結點,並列印該結點的編號

//else//}

void creatjoseph(int n, linklist *l)//建立乙個長為n的joseph環,n的上限為30

initlist(l);

int i;

for(i=1;i<=n;i++)

nm=p->key;

temp=p->next;

deletenode(l,p);//有問題主要是記憶體越界的問題和野指

//針問題

}}

int main()

修改後的程式:

華為筆試題目--約瑟夫環(joseph)修改版

華為筆試題目

注意 沒有答案,有興趣的自己找一下,只在這做個記錄 一群大雁往南 飛,給定乙個字串記錄地面上的遊客聽到的大雁叫聲,請給出叫聲最少由幾隻大雁發出。具體的 1.大雁發出的完整叫聲為 quack 因為有多隻大雁同一時間嘎嘎作響,所以字串中可能會混合多個 quack 2.大雁會依次完整發出 quack 即字...

約瑟夫環C 筆試題

約瑟夫環經典問題,自己剛好學習到。記錄一下,利用迴圈鍊錶實現的。基本思路 建立乙個迴圈鍊錶,不斷按上述規律刪除第m個元素,直到所有元素被刪除。2 借鑑網上其他 建立linklist類,感覺其實不用這個類一樣可以實現,使用後反而迷惑初學者。該類建立的目的主要是建立種子節點鍊錶,並宣告子函式。3 然後輸...

筆試題 約瑟夫環的問題

約瑟夫遊戲的大意 30個遊客同乘一條船,因為嚴重超載,加上風浪大作,危險萬分。因此船長告訴乘客,只有將全船29個旅客投入海中,其餘人才能倖免於難。無奈,大家只得同意這種辦法,並議定30個人圍成一圈,由第乙個人數起,數到第三個人,便將他投入大海中,如此,迴圈的進行,直到剩下乙個遊客為止。問 哪些位置是...