문제
나는 수학을 많이 본 적이 없으며 누군가가 다음과 같이 나를 도울 수 있기를 바라고 있습니다.
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);
}
}