誰能設計程式解了這道數學題啊,誰能設計一個程式解了這道數學題啊

時間 2022-03-03 16:55:04

1樓:

先給每個人編號1到1000,用while迴圈,每次踢出報到10的人,到只剩下一個人為止,那個人的編號 mod 10就是他第一次報的數。

這個問題被稱作「約瑟夫問題」。

這題的結果是3。第63個人最後離開。

c程式:

#include

int main()

2樓:

用一個迴圈連結串列,是比較容易理解也比較快速的方法。但要自己先寫一個迴圈連結串列類。

下面的方法用的是陣列,不用寫迴圈連結串列類,但是判斷會有很多冗餘,因此速度將比較慢。

static bool zarray[ 1000 ];

static int ncount = 1000;

int getnext( int cur )while( zarray[ cur ] );

return cur;

}void remove( int cur )int main()

printf( "第一次報的數是", (cur + 1 )%10 );}

3樓:匿名使用者

#include

using namespace std;

int main()

before=1;

before_people=0;

first[0]=1;

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

before++;

first[i]=before;

before_people=i;

if(before==10)

}while(1)

before++;

first[i]=before;

before_people=i;

if(before==10)

finish=false;}}

if(finish)

}cout<<"最後一個人第一次報的數是:"<

return 0;}

4樓:葉南

1.模擬,即把每一趟退出的人都列出來看最後剩下的人編號。這個演算法要計算nm次,n=1000,m=10,就是10000次,適合計算機求解,手工不適合

2.有如下的遞推式成立:

j(1,m)=1

j(n,m)=(j(n-1,m)-1+m)modn+1

xmody表示x對y取餘數

n=1000時要計算1000次

這種演算法同樣只適合計算機求解

3.設[x]是x整數部分

(1)每遍歷一次佇列,人數大約變為原來的9/10

(2)設n個人

a1,a2,a3....,an-1,an

從a1開始報數,遍歷一遍後,還剩下

a1,a2,a3...a9,a11,...a19,a21,...a29,a31....a(n-nmod10-1),a(n-nmod10+1)...an

記這時的佇列為s

不難得到如下結論:

①在這一次遍歷中最後一個退出的人是a(n-nmod10)

②若10|n,最後一個剩下的是s裡第個人

③若nmod10≠0,且s從1報數最後退出的人編號j(n-[n/10],10)>nmod10,原佇列最後一個剩下的是s裡第個人

④若nmod10≠0,且s從1報數最後退出的人編號j(n-[n/10],10)≤nmod10,原佇列最後一個剩下的是s裡第個人

⑤s中的第t個人對應原佇列a1a2...an的第個人

⑥n=1,2,...9時,j(n,10)=1,1,2,4,4,2,5,7,8

綜合①-⑥,得到j(n,10)另外一個遞推式:

j(n,10)=

1,1,2,4,4,2,5,7,8 當n≤9

t=j(n-[n/10],10)-nmod10,j(n,10)=[(t-1)/9]*10+(t-1)mod9+1 當j(n-[n/10],10)>nmod10

t=n-[n/10]+j(n-[n/10],10)-nmod10,j(n,10)=[(t-1)/9]*10+(t-1)mod9+1 當j(n-[n/10],10)≤nmod10

因從n到n-[n/10]遞推變數變為原來的9/10,故這個演算法需要計算log[10/9]1000=66次,雖然有點多,但已經可以打草稿算出來,方法是先計算j(9,10)再根據遞推式反推回來。我把每次計算後的n和j(n,10)的結果寫在下面:

n j(n,10)

9 8

10 8

11 7

12 5

13 2

14 12

15 7

16 1

17 11

18 3

19 13

21 13

23 11

25 6

27 26

30 28

33 27

36 23

39 15

43 13

47 6

52 4

57 54

63 56

69 52

76 51

84 52

93 54

103 56

114 57

126 56

139 52

154 53

171 57

189 53

209 48

232 51

257 48

285 47

316 45

351 48

389 43

432 45

480 49

533 51

592 54

657 52

729 47

810 52

900 57

1000 63

由此看出,最後一人編號是63

你可以寫個程式驗證這個結果是正確的

這個演算法另一優點是計算次數與n成對數關係,計算複雜度比n次,nm次的要好很多

當n=1000000時,這個演算法也只需要計算約log[10/9]100000=132次。

希望回答對你有所幫助!

5樓:匿名使用者

http://www.w3.org/1999/xhtml">序號:n次出局:所報之數列

誰能解這道數學題?誰能解開這道數學題?

這顯然是不可能的,下面的數字均為奇數,三個奇數之和必定為奇數,而等式右邊為偶數,所以不可能。望採納o o 不行的,一個個算下去都沒用,必須要有偶數。誰能解開這道數學題?30 咋一看這來題似乎是無解的,因為給。源出的都是奇數,三個奇數相加得到的必然還是奇數。因此不可能等於三十。可是換一個思路,如果上面...

誰能幫我解答一下這道數學題啊,誰能幫我解答一下這四道數學題呢?

數理邏輯我還沒學,不能幫你 找些書看看吧 誰能幫我解答一下這四道數學題呢? 1 男生人數 全班人數 2 3 2 媽媽體重 爸爸體重 3 4 3 小強身高 小明身高 4 5 120 4 5 150釐米4 250 3 5 50 只 誰能幫我解答一下這道小學生數學題 楊樹比柳樹少了八棵,少了十分之一,柳樹...

誰幫我做一下這道趣味數學題,誰能幫我看一下這道數學題?

第一道題有三個人分別選了1 2 3 第二道題他們三個人選了同一個答案 就是1吧,因為所有答案條件相同無所謂的 另外兩個人選了2 3 第三道題他們五個人選了1,其他兩個人選了2 3第四題他們7個選1,另兩個2 3 第五題他們9個選1,另兩個2 3 第六題他們11個選1,另兩個2 3 一共13人。只有這...