zoukankan      html  css  js  c++  java
  • Self Numbers

    Self Numbers

    Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 34   Accepted Submission(s) : 16
    Problem Description
    In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n. (The d stands for digitadition, a term coined by Kaprekar.) For example, d(75) = 75 + 7 + 5 = 87. Given any positive integer n as a starting point, you can construct the infinite increasing sequence of integers n, d(n), d(d(n)), d(d(d(n))), .... For example, if you start with 33, the next number is 33 + 3 + 3 = 39, the next is 39 + 3 + 9 = 51, the next is 51 + 5 + 1 = 57, and so you generate the sequence 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... The number n is called a generator of d(n). In the sequence above, 33 is a generator of 39, 39 is a generator of 51, 51 is a generator of 57, and so on. Some numbers have more than one generator: for example, 101 has two generators, 91 and 100. A number with no generators is a self-number. There are thirteen self-numbers less than 100: 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, and 97. Write a program to output all positive self-numbers less than or equal 1000000 in increasing order, one per line.
     
    Sample Output
    1 3 5 7 9 20 31 42 53 64 | | <-- a lot more numbers | 9903 9914 9925 9927 9938 9949 9960 9971 9982 9993 | | |
     
    Source
    Mid-Central USA 1998
     
     1 #include <stdio.h>
     2 #include <string.h>
     3 int sum[1000005]={0};
     4 int All_sum(int n)
     5 {
     6     if (n<10)
     7         return n;
     8     else
     9         return (n%10)+All_sum(n/10);
    10  }
    11 
    12 void num(int i,int n)
    13 {
    14     int j,k=i-9*n,tmp;
    15     if(k<0)
    16         k=1;
    17     while(1)
    18     {
    19         tmp=k;
    20         if(k>i)
    21             return 0;
    22         tmp+=All_sum(k);
    23         if(tmp==i)
    24         {sum[tmp]+=1;return 0;}
    25         k++;
    26     }
    27     return 0;
    28 }
    29 
    30 int main()
    31 {
    32     int i,n,Len,k,a,j;
    33     for(i=1;i<=1000000;i++)
    34     {
    35         if(i<10)n=1;else if(i<100)n=2; else if(i<1000)n=3; else if(i<10000)n=4; else if(i<100000)n=5; else if(i<1000000)n=6;
    36         if(sum[i]==0)
    37            {
    38                num(i,n);
    39            }
    40         if(sum[i]==0)
    41            printf("%d
    ",i);
    42     }
    43     return 0;
    44 }
    View Code
    转载请备注:
    **************************************
    * 作者: Wurq
    * 博客: https://www.cnblogs.com/Wurq/
    * Gitee: https://gitee.com/wurq
    **************************************
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/Wurq/p/3750305.html
Copyright © 2011-2022 走看看