由于本人的頭鐵,堅持要寫編程題講解。所以昨天的文章發出去以後閱讀量為4,我甚至懷疑是不是還在審核中orz,但是經過我的一番仔細檢查發現,并沒有,已經過審了,隻是單純的沒人看而已(早就說沒人看啦)...但是,即使是沒人看,我也要寫!(哪來的鐵頭憨憨,不就是為了申請原創湊三篇文章麼)
話不多說,請聽題:
說李華的學校要開聯歡晚會,為了使每一個同學都參與進來,機智的主持人決定要帶領觀衆席的同學們玩一個互動遊戲,這個遊戲叫——擊鼓傳花。遊戲規則是這樣的:n個同學坐着圍成一個圓圈,指定一個同學手裡拿着一束花,主持人在旁邊背對着大家開始擊鼓,鼓聲開始之後拿着花的同學開始傳花,每個同學都可以把花傳給自己左右的兩個同學中的一個(左右任意),當主持人停止擊鼓時,傳花停止,此時,正拿着花沒傳出去的那個同學就要給大家表演一個節目。這時愛思考問題(事多)的李華提出了一個十分有趣的問題:有多少種不同的方法可以使得從自己手裡開始傳的花,傳了m次以後,又回到自己手裡呢。對于傳遞的方法當且僅當以下這兩種方法,接到花的同學按接球順序組成的序列是不同的,才視作兩種傳花的方法不同。比如有3個同學1号、2号、3号,并假設李華同學為1号,花傳了3次回到李華手裡的方式有1->2->3->1和1->3->2->1,共2種。
答:節目都表演不完總是延遲結束就不要在這種無聊的遊戲上浪費時間了好麼(閉嘴)這道題我那乍一看還以為是道數學題,甚至想用排列組合,但是關鍵是雙向傳遞給這個問題增加了難度。後來看了正确答案以後才想到。我們是在編程,要利用好數組等可以記錄的優勢。所以這道題其實非常簡單,隻要用數組記錄下每一個同學被傳到的概率就好了,從第一傳開始,依次更新每一個同學的被傳到概率表,也就是傳到N号同學那麼N-1和N 1号同學被傳到的概率都要 1,這樣傳M次以後輸出一号同學的概率就是答案。
以下是代碼,已經通過OJ測試。
// #include<stdio.h>
// void main()
// {
// int n,m;
// int num[30];
// int temp[30];
// scanf("%d %d",&n,&m);
// for (int j = 0; j < n; j )
// {
// num[j]=0;
// temp[j]=0;
// }
// num[0]=1;
// temp[0]=1;
// for(int i = 1; i <= m; i )
// {
// for (int j = 0; j < n; j )
// {
// num[j]=temp[(j 1)%n] temp[(j-1 n)%n];
// //printf("%d ",num[j]);
// }
// for (int j = 0; j < n; j )
// {
// temp[j]=num[j];
// }
// //printf("\n");
// }
// printf("%d",num[0]);
// }
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!