1. 程式人生 > >美團網大富翁遊戲程式設計原理及實現

美團網大富翁遊戲程式設計原理及實現

美團網大富翁遊戲程式設計原理及實現

題目:
大富翁遊戲,玩家根據骰子的點數決定走的步數,即骰子點數為1時可以走一步,點數為2時可以走兩步,點數為n時可以走n步。求玩家走到第n步(n<=骰子最大點數且是方法的唯一入參)時,總共有多少種投骰子的方法。

輸入描述:
輸入包括一個整數n,(1 ≤ n ≤ 6)

輸出描述:
輸出一個整數,表示投骰子的方法

輸入例子1:
6

輸出例子1:
32

原理解釋
這道題目很簡單,就是簡單的初中數學題的實現,首先我們對2進行分析,2可以為1_1和2兩步,3可以分為1_2,2_1,1_1_1,3這四步,如果你的數學基本功較好的話,可以看出這是2的(n-1)次方。那到底是不是呢?再來分析4步,以及題中所給的是6步的結果,由此我們可以推斷出假想正確。為什麼呢?

首先對於所要走的步數我們可以將它們全部化為1,以6步舉例。
6分為1_1_1_1_1_1
當然6步如果你不會像我一樣想的話,可以這樣想,6分為1_5,2_4,3_3,當然反過來也正確。對於6個1來說,中間有5個空,所以結果就是2的5次方。
為什麼呢?
首先當成1_5和5_1,那麼5也可以分成1_4,2_3,3_2,4_1.
所以我們對5來看還是分成5個1.有兩種情況.
然後對5個1在進行劃分,有人可能會有疑問,你這樣分了,為什麼不對6進行2_4分,不急,我接著說。
1_1_1_1_1分為1_4和4_1.這時你看是不是有了1_1和1_1_1_1.記住這時候的1_1代表2.也有兩種情況.
所以繼續劃分,最後因為有6個1有5個間隔,所以結果為2的5次方。

#include<iostream>
#include<math.h>
using namespace std;
int result(int n);
int main()
{
	int n;
	cin>>n;
	cout<<result(n)<<endl;
}

int result(int n)
{
	int result;
	result=pow(2,n-1);
	return result;
}