zoukankan      html  css  js  c++  java
  • 黑洞数

    任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
    比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

    请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。

    循环圈的输出格式仿照:
    [82962, 75933, 63954, 61974]

     1 #include<string.h>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 int a[10];
     8 int b[5];
     9 int c[100000];
    10 int fun(int n)
    11 {
    12     int p,q;
    13     memset(b,0,sizeof(b));
    14     int i=0;
    15     p=q=0;
    16     while(n)
    17     {
    18         b[i++]=n%10;
    19         n=n/10;
    20     }
    21     sort(b,b+5);
    22     for(i=0;i<5;i++)
    23     {
    24         p=p*10+b[i];
    25         q=q*10+b[4-i];
    26     }
    27     return q-p;
    28 }
    29     
    30 
    31 int main()
    32 {
    33     int i,j,t,k;
    34     memset(c,0,sizeof(c));
    35     for(i=10000;i<99999;i++)
    36     {
    37         a[j=0]=t=i;
    38         while(j<10&&!c[t])
    39         {
    40             t=fun(a[j]);
    41             if(t==a[0])
    42             {
    43                 for(k=0;k<j;k++)
    44                 {
    45                     printf("%d, ",a[k]);
    46                     c[a[k]]=1;
    47                 }
    48                     printf("%d\n",a[j]);
    49                     c[a[j]]=1;
    50 
    51                 break;
    52             }
    53             a[++j]=t;
    54         }
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    USACO Spinning Wheels
    USACO Agri-Net
    NOIP 2009 最优贸易
    USACO Cow Contest
    USACO Subset Sums
    USACO Cow Cars
    USACO Making the Grade
    NOIP 2008 传纸条
    NOIP 2000 方格取数
    NOIP 1999 导弹拦截
  • 原文地址:https://www.cnblogs.com/xiaofanke/p/3086945.html
Copyright © 2011-2022 走看看