https://www.acmicpc.net/problem/2231
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
제출 46690 정답 비율 48%
#include <stdio.h>
void print(int arr[]) {
int M = 0;
for (int j = 0; j < 6; j++) {
M += arr[j] * 10 ^ j;
}
printf("%d", M);
}
void main() {
int N = 0;
scanf("%d", &N);
int i=0, j = 0, sum= 0;
int arr[6] = { 0 };
while (1) {
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
i = 0;
sum = N;
sum -= (10 ^ (i)+1) * arr[i];
i ++;
if (sum <= 0)
break;
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
sum -= (10 ^ (i)+1) * arr[i];
i++;
if (sum <= 0)
break;
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
sum -= (10 ^ (i)+1) * arr[i];
i++;
if (sum <= 0)
break;
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
sum -= (10 ^ (i)+1) * arr[i];
i++;
if (sum <= 0)
break;
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
sum -= (10 ^ (i)+1) * arr[i];
i++;
if (sum <= 0)
break;
for (arr[i] = 9; arr[i] >= 0; arr[i] --) {
sum -= (10 ^ (i)+1) * arr[i];
i++;
if (sum <= 0)
break;
}
}
}
}
}
}
}
if (sum == 0)
print(arr);
else
printf("0");
}
음... 될리가 없지... 당연함...