fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long lld;
  5.  
  6. // 중복되는 숫자가 있는가
  7. bool duplCheck(lld n){
  8. bool fq[10]={};
  9. while(n>0){
  10. if(fq[n%10]) return false;
  11. fq[n%10] = true;
  12. n /= 10;
  13. }
  14. return true;
  15. }
  16.  
  17. // x번째 숫자까지는 x로 나누어지는가
  18. bool correct(lld n){
  19. int len = 0;
  20. for(lld t=n; t>0; t/=10) len += 1;
  21.  
  22. for(int pos=len; len>0 && n>0; --len, n/=10){
  23. if( n % len != 0 ) return false;
  24. }
  25. return true;
  26. }
  27.  
  28. lld postlen[4]={1,1,8,4};
  29. lld postfix[4][10]={
  30. {5}, {0}, {1,2,3,4,6,7,8,9}, {2,4,6,8}
  31. };
  32.  
  33. int main(){
  34. vector<lld> a(1, 0);
  35.  
  36. for(int pos=1; pos<=10; ++pos){
  37. vector<lld> b;
  38. // 짝수번째는 2, 4, 6, 8 중 하나
  39. // 홀수번째는 0, 5 를 제외한 수 중 하나
  40. // 다섯번째는 5, 열번째는 0 이다.
  41. int pf = 3;
  42. if(pos == 5) pf = 0;
  43. else if(pos == 10) pf = 1;
  44. else if(pos % 2) pf = 2;
  45.  
  46. for(int i=0; i<a.size(); ++i){
  47. for(int j=0; j<postlen[pf]; ++j){
  48. lld num = a[i]*10 + postfix[pf][j];
  49. if(duplCheck(num) && correct(num)){
  50. b.push_back(num);
  51. printf("%lld ", num);
  52. }
  53. }
  54. }
  55. a = b;
  56. printf("\n%d번째 숫자까지 가능한 수: %d개\n\n", pos, a.size());
  57. }
  58. return 0;
  59. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
1 2 3 4 6 7 8 9 
1번째 숫자까지 가능한 수: 8개

12 14 16 18 24 26 28 32 34 36 38 42 46 48 62 64 68 72 74 76 78 82 84 86 92 94 96 98 
2번째 숫자까지 가능한 수: 28개

123 126 129 147 162 168 183 186 189 243 246 249 261 264 267 321 324 327 342 348 369 381 384 387 423 426 429 462 468 483 486 489 621 624 627 642 648 681 684 687 723 726 729 741 762 768 783 786 789 843 846 849 861 864 867 921 924 927 942 948 963 981 984 987 
3번째 숫자까지 가능한 수: 64개

1236 1264 1268 1296 1472 1476 1624 1628 1684 1832 1836 1864 1892 1896 2436 2468 2496 2648 3216 3248 3276 3428 3692 3812 3816 3872 3876 4236 4268 4296 4628 4832 4836 4892 4896 6248 6428 6812 6872 7236 7264 7268 7296 7412 7416 7624 7628 7684 7832 7836 7864 7892 7896 8432 8436 8492 8496 8612 8672 9216 9248 9276 9428 9632 9812 9816 9872 9876 
4번째 숫자까지 가능한 수: 68개

12365 12645 12685 12965 14725 14765 16245 16285 16845 18325 18365 18645 18925 18965 24365 24685 24965 26485 32165 32485 32765 34285 36925 38125 38165 38725 38765 42365 42685 42965 46285 48325 48365 48925 48965 62485 64285 68125 68725 72365 72645 72685 72965 74125 74165 76245 76285 76845 78325 78365 78645 78925 78965 84325 84365 84925 84965 86125 86725 92165 92485 92765 94285 96325 98125 98165 98725 98765 
5번째 숫자까지 가능한 수: 68개

123654 129654 147258 183654 189654 321654 327654 369258 381654 387654 723654 729654 741258 783654 789654 921654 927654 963258 981654 987654 
6번째 숫자까지 가능한 수: 20개

1296547 1472583 3216549 3692584 3816547 7296541 7296548 7836542 7836549 9216543 9632581 
7번째 숫자까지 가능한 수: 11개

38165472 
8번째 숫자까지 가능한 수: 1개

381654729 
9번째 숫자까지 가능한 수: 1개

3816547290 
10번째 숫자까지 가능한 수: 1개