用C語言驗證 “6174黑洞之謎”!萬物始於C,編程世界的黑洞!


今兒跟大伙分享一個數字之謎——6174之謎,看看我們是怎么用C語言驗證它的。

先簡單介紹一些跟我們這個題目相關的背景知識。

黑洞,我想不少人都聽說過,意思就是宇宙中的黑洞可以將任何物質,以及運行速度最快的光牢牢吸住,不使它們逃脫。

數學黑洞也是如此,也就是對於規定的數字來說,無論怎樣設值,在規定的處理法則下,最終都將得到固定的一個值,再也跳不出去了,我們今天所說的“6174黑洞”就是這個意思。


 

1955年,印度數學家卡普耶卡(D.R.Kaprekar)研究了對四位數的一種變換:任給出四位數k0,用它的四個數字由大到小重新排列成一個四位數m,再減去它的反序數rev(m),得出數k1=m-rev(m)。

然后,繼續對k1重復上述變換,得數k2。如此進行下去,卡普耶卡發現,無論k0是多大的四位數, 只要四個數字不全相同,最多進行7次上述變換,就會出現四位數6174。

這就是數學史上著名的“6174猜想”,也稱為6174數字黑洞”,以上計算過程稱為卡普雷卡爾運算,這個現象稱歸斂。


 

當然,這是4個數的情況,當數字個數為3的時候,循環值為495,也是著名的數學黑洞數字。今天我們只要想跟大家說的是如何用C語言驗證6174黑洞。

那這個問題實際上抽象為:任意選一個四位數(數字不能全相同),把所有數字從大到小排列,再把所有數字從小到大排列,用前者減去后者得到一個新的數。重復對新得到的數進行上述操作,7步以內必然會得到6174。

請用C語言進行驗證,並求出經過幾次變換得到6174。

其實與本題類似的情況在浙大PAT中曾經出現過,解決總體思路比較簡單,主要涉及排序和數字放入數組進行計算的相關情況,代碼我們下面給出一種供大家參考,非唯一解,各位有好的方法可以留言一起交流。

#include <stdio.h>

int* sort(int number[],int len) //大到小的排序

{

  int a =0;

  for(int i=0; i<len; ++i)

  {

    for(int j=i+1;j<len;++j)

    {

      if(number[i] <number[j])

      {

        a = number[i];

        number[i] = number[j];

        number[j] = a;

      }

    }

  }

  return number; 

}

 

 

如果你想深度學習C語言以及高級編程——編程俱樂部【下圖進入】!

涉及到:C語言、C++、windows編程、網絡編程、QT界面開發、Linux編程、游戲編程、黑客等等......


 

程序員編程入門資料:


 

程序員​推薦學習書籍:


 

一個活躍、高逼格、高層次的程序員編程學習殿堂;編程入門只是順帶,思維的提高才有價值!


 
int convert(int number[],int ans)//每次變換得到的數字

{

  int *p = NULL;

  int m=0;

  number[0] = ans/1000;  //把這個數放入數組

  number[1] = ans%1000/100;

  number[2] = ans%100/10;

  number[3] = ans%10;

  p = sort(number,4);

  m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);

  return m;

}

int main(void)

{

  int number[4] = {0};

  int *p = NULL;

  int n = 0;

  int ans = 0;

  int count = 0;

  printf("請輸入一個互不相同的四位數:");

  scanf("%d",&n);

  printf("%d-",n);

  ans = n;

  while(ans!=6174)

  {

    ans = convert(number,ans);

    printf("%d-",ans);

    ++count;

  }

  if(6174==ans)

    printf("%d\n",6174);

    printf("%d",count);

  return 0;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM