자연수 N과 M을 입력 받아서 주사위를 N번 던져서 나온 눈의 합이 M이 나올 수 있는 모든 경우를 출력하는 프로그램을 작성하시오.
첫 줄에 주사위를 던진 횟수 N(2≤N≤7)과 눈의 합 M(1≤M≤40)이 들어온다.
주사위를 던진 횟수의 합이 M이 되는 경우를 모두 출력한다.
작은 숫자 부터 출력한다.
3 10 | 1 3 6
1 4 5
1 5 4
1 6 3
2 2 6
2 3 5
…
6 2 2
6 3 1 |
지난번에 작성한 주사위1에서 약간만 변형하면 해결할 수 있습니다. 이전 문제가 더 어려웠던 것 같네요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> using namespace std; void FindAllPatternBySum(int stage = 0, int tempSum = 0); void PrintArr(); int cnt, sum; int arr[7]{}; int main() { // 주사위 던진 횟수와 눈의 합 입력 cin >> cnt >> sum; FindAllPatternBySum(); } // 나온 눈의 합이 sum이되는 모든 경우 찾기 void FindAllPatternBySum(int stage, int tempSum) { // 현재 단계가 입력 회수만큼 진행된 경우 if (stage == cnt) { // 현재까지의 합이 입력된 합과 같으면 출력 if(tempSum == sum) PrintArr(); } // 아직 던진 횟수에 도달하지 못한 경우 else { // 주사위의 모든 경우를 확인한다. for (int i = 1; i <= 6; ++i) { arr[stage] = i; FindAllPatternBySum(stage + 1, tempSum + i); } } } // 패턴 출력 void PrintArr() { for (int i = 0; i < cnt; ++i) { cout << arr[i] << ' '; } cout << endl; } | cs |
JUNGOL) 문제은행) 실력키우기) 주사위 던지기2