簡體   English   中英

我如何計算以3為基礎的組合的排列數量?

[英]How do I calculate the number of permutations in base 3 combinatorics?

我從不喜歡數學,我希望有人可以幫助我解決以下問題。

我有5個盒子:

 1   2   3   4   5
[ ] [ ] [ ] [ ] [ ]

這些框可以是白色,灰色或黑色(或將其視為0、1、2)

盒子套裝可以處於多少種狀態?

生成所有可能結果的偽代碼(或任何語言)是什么?

即...

00000
00001
00011
00111

等,等等。

我真的很感謝任何人都可以給我的幫助。

組合數量的答案是:3x3x3x3x3(3 ^ 5),因為每個盒子可以有3種可能的顏色。

至於生成結果,請查看是否可以使用帶有0、1或2的矩陣表示框的顏色來弄清楚結果。 在較小的比例下(假設3個框),它看起來像這樣:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2

這是經典的排列生成問題。 每個職位有3種可能性,還有5種職位。 生成的字符串總數為3 ^ 5 =243。如果需要通用解決方案,則需要遞歸(簡單的迭代循環僅適用於問題的單個實例)。

這是一個簡單的示例:

public static void Main(string[] args){

    Generate("", 5);
}

private void Generate(string s, int limit)
{
    if (s.Length == limit)
        Console.WriteLine(s);
    else
    {
        Generate(s+"0", limit);
        Generate(s+"1", limit);
        Generate(s+"2", limit);
    }
}

要回答您的第一個問題,如果盒子只能包含兩個值之一,答案是什么? 那么,如果盒子包含三個值之一,答案是什么?

要回答第二個問題,哪種偽代碼會生成一個框的所有可能結果? 現在,偽代碼會生成兩個框的所有可能結果?

我建議先在紙上解決問題。 嘗試用較少數量的盒子(也許是三個)解決問題,並列出所有可能性。 然后,考慮一下您的推理方式,或如何向小孩解釋您的所作所為。

謝謝大家的回答,至少是那些實際給我的回答。

雖然我可以理解這個問題聽起來像是直接從計算機科學101中提出的,但事實並非如此。 具有諷刺意味的是,這是在一個真實的截止日期前進行的現實生活,我沒有時間回想起我被教導這些東西時對自己說:“我什么時候需要這個廢話”

如果我想像個男生一樣受到光顧和對待,我會回到我的小學,問我的五年級老師是否可以去洗手間

再次感謝

void solve(int p=0,int n=5,int d=0)
{
    if (n==p)
    {
        int rev=d;
        int i=0;
        while (i<5) {
            cout << rev%10;
            rev /= 10;
            i++;## Heading ##
        }
        cout << endl;
        return;
    }
    for(int i=0; i<3 ; i++)
    {
        solve(p+1,n, d*10 + i);
    }
}

的可能性是3的冪5

如果您從0循環到該數字減去1,並以3為基數表示,則將有所有可能(請記住在必要時在0之前加上數字)

在Ruby中:

number_of_possibilities = 3**5-1

for i in (0..number_of_possibilities)
  base_3_number = i.to_s(3)
  puts "%05d" % base_3_number # number formatting used to prepend 0s where necessary
end

這似乎是一個作業問題。 然后,我將為您提供有關解決方案的幫助。

您要說的是,每個框都有三個狀態,它們都是獨立的。 一個盒子將具有3個解決方案,兩個盒子將具有3 * 3個解決方案-對於第一個盒子的每個狀態,第二個盒子也將具有三個狀態。 將其擴展到5個框。

要生成每個解決方案,您可以循環瀏覽它。 每個框的嵌套循環很容易,乘以10的冪可以讓您一次顯示該數字。

您可以采用類似的方式來概括多個框的代碼。

狀態數是3 ^ 5。

偽代碼是

for value from 0 to 3^5-1
    print base3(value)

其中base3是一個函數,該函數反復取模3以獲得一個數字,然后刪除該數字(除以3)

提示:假設每個框是數字中的一個位置,每種顏色是一個不同的數字。 在現實世界中,使用2個位置和10個可能的數字可以獲得多少組合(包括零)? 那三個職位呢? 給定可用位數,添加額外頭寸與組合數量之間有什么關系?

唯一組合數: 3^5=243

碼:

n = 0
for i = 0 to 3^5-1
{
    s = ""
    for j = 1 to 5
    {
        d = n mod 3
        s = toascii(d) . s
        n = n / 3
    }
    println s
    i = i + 1
}

這是我第一次學習如何做到這一點的方法:首先考慮一下您正在做出多少選擇。 您正在做出五個選擇,每個框一個。 因此,寫下五個帶有乘法符號的空白行:

__ x __ x __ x __ x __ = ?

在每個空白處,寫下您必須為該框選擇的對象數。 由於每個框都有3個數字可供選擇,因此在每個空白處寫一個3:

3 x 3 x 3 x 3 x 3 = 243

這將為您提供這些選擇的排列總數。

我可以問一下您不了解的事情嗎? 我看到這里的每個人都只是回答了這個問題,但是如果您復制了他們的答案,那么您將一無所知,從而完全錯過了功課的重點。 假設您的下一課在此基礎上進行,您將進一步落后。

如果您是為我工作或在我的課堂上,我只需詢問以下內容...

“您認為應該如何解決該問題?” 答案可能揭示您正在掛斷電話。 我在CMU的一位明智的教授曾經說過:“直到您知道您不了解的內容,我都無法幫助您理解這一點。”我從來沒有弄清楚自己不了解的內容,因此我放棄了他的課程,但這一課程堅持了下來我。

我知道這可能為時已晚,但是對於這些家庭作業問題,我真的認為我們應該幫助該人學習,而不是簡單地提供答案並為他們做作業。

甚至不要嘗試編寫代碼來回答這個問題! 原因是您需要一些非常大的數字(階乘)來進行計算。 這些創建的數字遠大於CLR中的任何基本類型。 您可以使用此開源庫進行計算。

您的問題只需要組合規則中的乘積規則即可

您可以通過3種方式選擇第一個盒子的狀態,通過3種方式選擇第二個盒子的狀態,並通過3種方式選擇...和第5個盒子的狀態。 可以設置所有盒子狀態的方式數是所有五個(相等)方式的乘積,即3x3x3x3x3 = 3 5

相似的問題:在十進制系統中,您可以用5位數字形成幾個數字,並計算前導零? 也就是說,從00000到99999有多少個數字? 您可以用10種方式選擇第一個數字(0 ... 9),依此類推,依此類推,答案是10x10x10x10x10 = 100000,正如您已經知道的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM