五位黑洞数 所有五位数的循环圈

 
  
  
  
  
  1.  #include<stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. //排序 
  5. void  sortNum(int * oldNum,int * bigNum) 
  6. {// printf("/n  sort方法:"); 
  7.  int temp=0; 
  8.  for(int i=0; i<5;i++) 
  9.  { 
  10.    
  11.   for(int j=0;j<4;j++)           //排序从小到大 
  12.    if(oldNum[j]>oldNum[j+1]) 
  13.    { temp=oldNum[j+1]; 
  14.     oldNum[j+1]=oldNum[j]; 
  15.     oldNum[j]=temp; 
  16.  
  17.    }  
  18.    
  19.  } 
  20.  
  21.  for(int k=0;k<5;k++)         //从大到小 
  22.  { 
  23.   bigNum[k]=oldNum[4-k]; 
  24.  // printf("%d",bigNum[k]); 
  25.   
  26.  } 
  27. // printf("/n"); 
  28.  
  29.   
  30.  
  31.   
  32.  
  33. //转为数字 
  34.  
  35. int  arrytoInt(int * arry) 
  36.  int  number; 
  37.  number=arry[0]*10000+arry[1]*1000+arry[2]*100+arry[3]*10+arry[4]; 
  38.  return  number; 
  39.  
  40.   
  41.  
  42. //heidong 
  43. int  blackHol(int dig,int * allAnsw,int ans)    
  44.  int  subSort[100] ,inNum[5] ,bigNum[5]; 
  45.  int i=0, start=0; 
  46.   while(dig) 
  47.  { 
  48.    
  49.   for (int j=0; j<5; j++) 
  50.    { 
  51.     
  52.   inNum[j] = dig %10; // 将数字保存在数组中 
  53.   dig= (dig-dig % 10)/10;  
  54.  // printf("%d+++",num); 
  55.  // printf("%d+++",inNum[j]); 
  56.    } 
  57.    //printf("/n  sort方法:"); 
  58.  sortNum(inNum,bigNum); 
  59.  subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum); 
  60. // printf("%d-%d=%d/n",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]); 
  61.  
  62.  if(i==0) dig=subSort[i];//当开始时不会进入循环;因此要手动赋值 
  63.  
  64.  for(int m=0; m<i;m++) 
  65.   {// printf("subsort方法第%d%d次,subSort:%d/n",i,m,subSort[i]); 
  66.    dig=subSort[i];//并把差赋给寻控制循环的big 
  67.    if(subSort[m]==subSort[i])//找到循环圈 
  68.    { 
  69.     int isAs=0; 
  70.     start=m;//把下标赋给开始的值 
  71.    // printf("%d/n",m); 
  72.     for(int n=0;n<ans;n++) 
  73.     {  
  74.      if(allAnsw[n]==subSort[start]) 
  75.      isAs++; 
  76.     }  
  77.     if(isAs==0)//和以前的答案作比较,不同则输出 
  78.     { 
  79.      allAnsw[ans++]=subSort[start];//把每个圈的开始数存入, 
  80.      printf("[");//输出结果 
  81.     for(;start<i;start++) 
  82.      printf("%d  ,",subSort[start]); 
  83.     printf("]/n"); 
  84.     break
  85.     } 
  86.    } 
  87.   
  88.   } 
  89.   //if(start!=0) break;//控制外循环结束 
  90.   if(start!=0) break
  91.   i++; 
  92.  // printf("输出i的值%d/n",i); 
  93.   
  94.  } 
  95.   
  96. return  ans; 
  97.  
  98.   
  99.  
  100. void main() 
  101.  int num, allAnsw[100]={0},ans=0;//数字,答案集合,答案个数 
  102.  
  103.  printf("所有情况如下:/n"); 
  104. //sortNum(inNum,littNum); 
  105.  for(num=10000;num<=99998;num++) 
  106.  { 
  107.   int dig=num; 
  108.    
  109.  // printf("%d---",num); 
  110.   if(num%11111==0) 
  111.    continue
  112.   
  113.   else 
  114.   { 
  115.   //调用 
  116.  // int dig=34256; 
  117.  ans=blackHol(dig,allAnsw,ans);//答案的个数返回 
  118.  
  119. /***********************************************************/ 
  120. /*  int  subSort[100]  ,inNum[5] ,bigNum[5]; 
  121.   int start=0,i=0, j=0;; 
  122.   while(dig) 
  123.   { 
  124.  
  125.    printf("这是第%d次循环dig:%d---",i,dig); 
  126.   for (int j=0; j<5; j++) 
  127.    { 
  128.     
  129.   inNum[j] = dig %10; // 将数字保存在数组中 
  130.   dig= (dig-dig % 10)/10;  
  131.  // printf("%d+++",num); 
  132.  // printf("%d+++",inNum[j]); 
  133.    } 
  134.    //printf("/n  sort方法:"); 
  135.  sortNum(inNum,bigNum); 
  136.  subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum); 
  137.  printf("%d-%d=%d/n",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]); 
  138.     if(i==0) dig=subSort[i]; 
  139.  for(int m=0; m<i;m++) 
  140.   { 
  141.  printf("subsort方法第%d%d次,subSort:%d/n",i,m,subSort[i]); 
  142.    dig=subSort[i]; 
  143.    if(subSort[m]==subSort[i]) 
  144.    { 
  145.     start=m; 
  146.     printf("%d/n",m); 
  147.     printf("[");//输出结果 
  148.     for(;start<i;start++) 
  149.      printf("%d  ,",subSort[start]); 
  150.     printf("]/n"); 
  151.     break; 
  152.    } 
  153.     
  154.    
  155.   } 
  156.  
  157.  
  158.   if(start!=0) break; 
  159.   i++; 
  160.  
  161.   }*/ 
  162.  
  163.  
  164.  /******************************************************/ 
  165.  
  166.   } 
  167.  } 
  168.  printf("所有循环圈的开始值:/n"); 
  169.  for(int n=0;n<ans;n++) 
  170.  printf("%d/t",allAnsw[n]); 

你可能感兴趣的:(黑洞数)