문제

나는 수학을 많이 본 적이 없으며 누군가가 다음과 같이 나를 도울 수 있기를 바라고 있습니다.

5 개의 상자가 있습니다.

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

상자는 흰색, 회색 또는 검은 색 일 수 있습니다 (또는 0, 1, 2로 생각합니다)

상자 세트는 몇 개의 가능한 상태에있을 수 있습니까?

가능한 모든 결과를 생성하기위한 의사 코드 (또는 어떤 언어)?

즉...

00000
00001
00011
00111

기타 등 ...

누구나 나에게 이것을 줄 수있는 도움이 정말 감사합니다.

도움이 되었습니까?

해결책

이것은 고전적인 순열 생성 문제입니다. 각 위치에 대한 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);
    }
}

다른 팁

조합 수에 대한 답은 각 상자에 3 개의 가능한 색상을 가질 수 있으므로 3x3x3x3x3 (3^5)입니다.

결과를 생성하는 것은 상자의 색상을 나타 내기 위해이 매트릭스를 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 개)로 해결하고 모든 가능성을 나열하십시오. 그런 다음, 당신의 추론이 어떻게 진행되었는지, 또는 당신이 작은 아이에게 무엇을했는지 설명하는 방법을 생각해보십시오.

당신의 답변에 감사드립니다.

이 질문이 컴퓨터 과학 101에서 똑바로 뽑은 것처럼 들렸다는 것을 이해할 수는 있지만 그렇지 않았습니다. 이 문제의 아이러니는 실제 마감일에 실생활을위한 것이었고 나는이 물건을 가르치고 나 자신에게 말했다. "언제이 쓰레기가 필요할 때"

내가 학교 소년처럼 후원하고 대우 받고 싶다면 초등학교로 돌아가서 5 학년 선생님에게 물어볼 것입니다. ~할 수 있다 화장실에 가고

다시 한 번 감사드립니다

상태의 수는 3^5입니다.

의사 코드입니다

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

여기서 Base3은 모듈로 3을 반복적으로 가져 가면 숫자를 얻는 기능입니다.

힌트 : 각 상자가 숫자의 위치이고 각 색상이 다른 숫자라고 상상해보십시오. 현실 세계에서는 2 개의 위치와 10 자리 10 자리가있는 조합 (0 포함)이 몇 개입니까? 3 개의 위치는 어떻습니까? 사용할 수있는 숫자 수를 감안할 때 추가 위치를 추가하는 것과 조합 수 사이의 관계는 무엇입니까?

고유 한 수의 조합 : 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
}

내가 이것을 처음 배운 방법은 다음과 같습니다. 먼저 당신이 얼마나 많은 선택을하는지 생각해보십시오. 각 상자마다 하나씩 5 가지 선택을하고 있습니다. 따라서 곱셈 징후로 5 개의 빈 줄을 적어 두십시오.

__ x __ x __ x __ x __ = ?

각 빈에는 해당 상자에서 선택해야 할 객체 수를 작성하십시오. 각 상자에 대해 선택할 3 개의 숫자가 있으므로 3 개를 작성합니다. 모든 공백:

3 x 3 x 3 x 3 x 3 = 243

이를 통해 해당 선택에 대한 총 순열 수가 제공됩니다.

가능성의 수는 전력 5에 3입니다.

0에서 해당 숫자 마이너스 1로 고리하고 기본 3에서 표현하면 모든 가능성이 있습니다 (필요한 경우 0S를 준비하십시오).

루비에서 :

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

당신이 이해하지 못하는 것이 무엇인지, 무엇이 당신을 넘어 뜨리는 지 물어봐도 될까요? 나는 여기있는 모든 사람들이 단순히 질문에 대답했지만, 당신이 그들의 답변을 복사했다면, 당신은 아무것도 배우지 않았으므로 숙제의 요점을 완전히 놓쳤다. 다음 수업 이이 수업을 작성한다고 가정하면, 당신은 더 뒤쳐 질 것입니다.

당신이 나를 위해 일했거나 내 수업에 있었다면 나는 단순히 다음을 묻습니다 ...

"문제가 어떻게 해결되어야한다고 생각하십니까?" 어디에서 끊어지고 있는지 알 수있는 대답. CMU의 현명한 교수는 한 번 "당신이 이해하지 못하는 것을 알기 전까지는 이것을 이해하는 데 도움이 될 수 없다"고 말했다. 나.

나는 그것이 너무 늦었을 것임을 알고 있지만, 이러한 숙제 질문에 대해서는 단순히 답을 제공하고 그들을 위해 숙제를하는 대신 그 사람이 배우도록 도와야한다고 생각합니다.

당신의 문제는 그 이상이 필요하지 않습니다 제품의 규칙 조합에서.

상태를 선택할 수 있습니다 첫 번째 3 가지 방법으로 상자와 상태 3 가지 방법으로 상자와 ... 그리고 5 번째 상자의 상태는 3 가지 방법으로. 모든 상자의 상태를 설정할 수있는 방법의 수는 5 가지 (동일한) 방법, 즉 3x3x3x3x3 = 3의 제품입니다.5.

비슷한 질문 : 10 진수 시스템에서 5 자리 숫자로 몇 개의 숫자를 형성하여 주요 0을 계산할 수 있습니까? 즉, 00000에서 99999까지 몇 개의 숫자가 있습니까? 10 가지 방법 (0 ... 9) 등으로 첫 번째 숫자를 선택할 수 있습니다.

이것은 숙제 문제처럼 보입니다. 그럼 해결책에 대한 도움을 드릴게요.

당신이 말하는 것은 각 상자에는 3 개의 상태가 있다는 것입니다. 하나의 상자에는 3 개의 솔루션이 있고 2 개의 상자에는 3 * 3 솔루션이 있습니다. 첫 번째 상자의 각 상태마다 두 번째 상자에는 3 개의 상태가 있습니다. 5 개의 상자로 확장하십시오.

각 솔루션을 생성하려면 순환 단지이를 순환 할 수 있습니다. 각 상자의 루프를 위해 중첩을 쉽게 만들 수 있으며 10의 전력을 곱하면 숫자를 한 번에 표시 할 수 있습니다.

비슷한 방식으로 여러 상자의 코드를 일반화 할 수 있습니다.

이에 답하기 위해 코드를 쓰려고하지 마십시오! 그 이유는 그것을 계산하려면 매우 많은 숫자 (Factorials)가 필요하기 때문입니다. 이들은 CLR의 기본 유형보다 훨씬 큰 숫자를 만듭니다. 당신은 이것을 사용할 수 있습니다 OpenSource 라이브러리 계산을 수행합니다.

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);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top