셀프 넘버는 어떤 수에 그 각 자리 수를 더해 만들 수 있는 수가 아닌, 즉 생성자가 없는 수
처음에는 셀프 넘버가 11씩 증가하는 등차 수열인줄 알고 단순히 20 부터 11씩 더했는데,
생각보다 예외가 굉장히 많았다.
그래서 반대로 아예 1부터 10000까지 행렬을 채운 후
셀프 넘버를 찾아서 해당 인덱스에 0 대입했다.
이 방법을 처음부터 쓰지 않은 건, 셀프 넘버를 구하는게 힘들 거라 생각했는데 mod 연산자 쓰면 간단히 해결되는 문제였다.
#include <iostream>
using namespace std;
int main()
{
int arr[10001] = {
0,
};
for (int i = 1; i <= 10000; i++)
{
arr[i] = i;
}
arr[2] = arr[4] = arr[6] = arr[8] = arr[10] = arr[12] = arr[14] = arr[16] = arr[18] = 0;
for (int i = 10; i < 100; i++)
{
int temp = i + i / 10 + i % 10;
arr[temp] = 0;
}
for (int i = 100; i < 1000; i++)
{
int temp = i + i / 100 + (i % 100 / 10) + i % 10;
arr[temp] = 0;
}
for (int i = 1000; i < 10000; i++)
{
int temp = i + i / 1000 + (i % 1000 / 100) + (i % 100 / 10) + i % 10;
if (temp > 10000)
continue;
arr[temp] = 0;
}
for (int i = 1; i <= 10000; i++)
{
if (arr[i] == 0)
continue;
cout << arr[i] << '\n';
}
return 0;
}