導航:首頁 > 編程語言 > 編程黑洞陷阱

編程黑洞陷阱

發布時間:2023-03-31 01:35:54

⑴ 求C語言高手幫忙,做一個程序,求出1~50000內的所有「黑洞數」。謝謝了!(內有關於黑洞數的東西)

想了很久,在VC++6.0中調試了差不多半天,現在把求三位數和四位數中的黑洞數的程序寫出來了(按定義可知一位和二位數中不存在黑洞數),現在貼出來供凱喊大家批評指正:(五位數中黑洞數的求解代碼待續)

#include <iostream>
#include <stdio.h>
using namespace std;

int maxof3(int,int,int); //求三位數重排後的最大數
int minof3(int,int,int); //求三位數重排後的最小數
int maxof4(int,int,int,int); //求4位數重排後的最大數
int minof4(int,int,int,int); //求4位數重排後的最大數
void main()
{
int i;
for(i=100;i<=999;i++) //求仔孫升三位數中的黑洞數
{
int hun,oct,data,max,min,j;
hun=i/100; oct=i%100/10; data=i%10;
max=maxof3(hun,oct,data);
min=minof3(hun,oct,data);
j=max-min;
hun=j/100; oct=j%100/10; data=j%10;
if(min==minof3(hun,oct,data))
cout<<i<<" is a blackhole number!"<<endl;
}
for(i=1000;i<念老=9999;i++) //求四位數中的黑洞數
{
int t,h,d,a,max,min,j;
t=i/1000; h=i%1000/100; d=i%100/10; a=i%10;
max=maxof4(t,h,d,a);
min=minof4(t,h,d,a);
j=max-min;
t=j/1000; h=j%1000/100; d=j%100/10; a=j%10;
if(min==minof4(t,h,d,a))
cout<<i<<" is a blackhole number !"<<endl;
}
}
int maxof3(int a,int b,int c)
{
int t;
t=a;
if(b>t)
{t=b;b=a;a=t;}
if(c>t)
{t=c;c=b;b=a;a=t;}
else
{if(c>b)
{t=c;c=b;b=t;}
}
return(a*100+b*10+c);
}

int minof3(int a,int b,int c)
{

int t;
t=a;
if(b>t)
{t=b;b=a;a=t;}
if(c>t)
{t=c;c=b;b=a;a=t;}
else
{if(c>b)
{t=c;c=b;b=t;}
}
return(c*100+b*10+a);
}

int maxof4(int a,int b,int c,int d)
{
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
return(a*1000+b*100+c*10+d);
}

int minof4(int a,int b,int c,int d)
{
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
return(d*1000+c*100+b*10+a);
}

另外謝了一個求解五位數中的黑洞數的程序,把部分代碼復制到上面那個文件中就可以了:
#include <iostream>
using namespace std;

int maxof5(int,int,int,int,int);
int minof5(int,int,int,int,int);

void main()
{
int i;
for(i=10000;i<=50000;i++)
{
int dt,t,h,d,a,max,min,j;
dt=i/10000; t=i%10000/1000; h=i%1000/100; d=i%100/10; a=i%10;
max=maxof5(dt,t,h,d,a);
min=minof5(dt,t,h,d,a);
j=max-min;
dt=j/10000; t=j%10000/1000; h=j%1000/100; d=j%100/10; a=j%10;
if(min==minof5(dt,t,h,d,a))
cout<<i<<" is a blackhole number!"<<endl;
}
cout<<"maxof5(5,2,1,8,3) is : "<<maxof5(5,2,1,8,3)<<endl; //這行是測試用的
cout<<"minof5(5,2,1,8,3) is : "<<minof5(5,2,1,8,3)<<endl; //這行是測試用的,看看求解函
//數是否正確
}

int maxof5(int a,int b,int c,int d,int e)
{
int t;
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
if(e<=d)
{}
else
if(d<=e&&e<c)
{t=d;d=e;e=t;}

else
if(c<=e&&e<b)
{t=c;c=e;e=d;d=t;}
else
if(b<=e&&e<a)
{t=b;b=e;e=d;d=c;c=t;}
else
if(a<=e)
{t=a;a=e;e=d;d=c;c=b;b=t;}
else {cout<<"please check the program!"<<endl;}
return(a*10000+b*1000+c*100+d*10+e);
}

int minof5(int a,int b,int c,int d,int e)
{
int t;
if(a<b)
{a=a^b;b=a^b;a=a^b;}
if(c<d)
{c=c^d;d=c^d;c=c^d;}
if(a<c)
{a=a^c;c=a^c;a=a^c;}
if(b<d)
{b=b^d;d=b^d;b=b^d;}
if(b<c)
{b=b^c;c=b^c;b=b^c;}
if(e<=d)
{}
else
if(d<=e&&e<c)
{t=d;d=e;e=t;}

else
if(c<=e&&e<b)
{t=c;c=e;e=d;d=t;}
else
if(b<=e&&e<a)
{t=b;b=e;e=d;d=c;c=t;}
else
if(a<=e)
{t=a;a=e;e=d;d=c;c=b;b=t;}
else {cout<<"please check the program!"<<endl;}
return(e*10000+d*1000+c*100+b*10+a);
}

⑵ 數字黑洞6174原理是什麼

四位數黑洞6174原理如下:

把一個四位數的四個數字由小至大排汪嫌迅列,組成一個新數,又由大至小排列排列組成一個新數,這兩個數相減,之後重復這個步驟,只要四位數的四個數字不重復,數字最終便會變困此成 6174。

例如 3109,9310 - 0139 = 9171,9711 - 1179 = 8532,8532 - 2358 = 6174。而 6174 這個數也會變成 6174,7641 - 1467 = 6174。

任取一個四位數,只要四個數字不全相同,按數字遞減順序排列,構成最大數作為被減數,按數字遞增順序排列,構成最小數作為減數,其差就會得6174,如不是6174,則按上述方法再作減法,至多不過10步就必然得到6174。

假如將三位數按照下面的者亮規則運算下去,同樣會出現數字「陷阱」。

(1)若是3的倍數,便將該數除以3。

(2)若不是3的倍數,便將各數位的數加起來再平方。

如:126

結果進入「169-256」的死循環,再也跳不出去了。再如:368 ,結果,1進入了「黑洞」。

另有一種方法,可以把任何一個多位數,迅速地推入「陷阱」。

操作方法是:

第一步:數出多位數含有偶數(包括0)的個數,並以它作新數的百位數。

第二步:數出多位數含有奇數的個數,並以它作新數的十位數。

第三步:將位數所含數字作新數的個位數,組成新數後,對新數重復上述過程。

⑶ 數字黑洞演算法用迭代公式是什麼

數字黑洞演算法用迭代公式:xi(t+1)=xi(t)+rand*(xrh-xi(t))。數字黑洞,又稱指的是某種運算,這種運算限定從某些整數出發,反復迭代後結果必然落入一個點或若干點的情況叫數字黑洞。黑洞原是天文學中的概念,表示這樣一種天體:引力場是如此之強,就連光也不能逃脫出來。黑洞數又稱陷阱數,類具有奇特轉換特性整數,任何數字不全相同的整數,經有限重排求差操作,總會得某或些數,這些數即黑洞數重排求差操作即把組成該數數字重排得大數減去重排得小數。

⑷ 用c++編程求黑洞運算

123數字黑洞
黑洞原是天文學中的概念,表示這樣一種天體:它的引力場是如此之強,就連光也不能逃脫出來。數學中借用這個詞,指的是某種運算,這種運算一般限定從某些整數出發,反復迭代後結果必然落入一個點或若干點。數字黑洞運算簡單,結論明了,易於理解,故人們樂於研究。但有些證明卻不那麼容易。
任取一個數,相繼依次寫下它所含的偶數的個數,奇數的個數與這兩個數字的和,將得到一個正整數。對這個新的數再把它的偶數個數和奇數個數與其頌啟凱和拼成另外一個正整數,如此進行,最後必然停留在數123。
例:所給數字 1479
第一次計算結果 448
第二次計算結果 303
第三次計算結果 123
------------------------------------------------------------------
數字黑洞495
只要你輸入一個三位數,要求個,十,百位數字不相同,如不允許輸入111,222等。那麼
你把這三個數字按大小重新排列,得出最大數和最小數。再兩者相減,得到一個新數,再重新排列,再相減,最後總會得到495這個數字,人稱:數字黑洞。
舉例:輸入352,排列得532和235,相減得297;再排列得972和279,相減得693;排列得963和369,相減得594;再排列得954和459,相減得495。
應該只是一種數字規律吧,像這樣的還有狠多,比如四位數的數字黑洞6174:
把一個四位數的四個數字由小至大排列,組成一個新數,又由大至小排列排列組成一個新數,這兩個數相減,之後重復這個步驟,只要四位數的四個數字不重復,數字最終便會變成 6174。
例如 3109,9310 - 0139 = 9171,9711 - 1179 = 8532,8532 - 2358 = 6174。而 6174 這個數也會變成 6174,7641 - 1467 = 6174。
----------------------------------------------------------------------------------
任取一個四位數,只要四個數字不全相同,按數字遞減順序排列,構成最大數作為被減數;按數字遞增順序排列,構成最野喚小數作為減數,其差就會得6174;如不是6174,則按上述方法再作減法,至多不過7步就必然得到6174。
如取四位數5462,按以上方法作運算如下:
6542-2456=4086 8640-0468=8172
8721-1278=7443 7443-3447=3996
9963-3699=6264 6642-2466=4176
7641-1467=6174
那旁鍵么,出現6174的結果究竟有什麼科學依據呢?
設M是一個四位數而且四個數字不全相同,把M的數字按遞減的次序排列,
記作M(減);
然後再把M中的數字按遞增次序排列,記作M增,記差M(減)-M(增)=D1,從M到D1是經過上述步驟得來的,我們把它看作一種變換,從M變換到D1記作:T(M)= D1把D1視作M一樣,按上述法則做減法得到D2 ,也可看作是一種變換,把D1變換成D2,
記作:T(D1)= D2
同樣D2可以變換為D3;D3變換為D4……,既T(D2)= D3, T(D3)= D4……
現在我們要證明,至多是重復7次變換就得D7=6174。
證:四位數總共有104=10000個,其中除去四個數字全相同的,餘下104-10=9990個數字不全相同.我們首先證明,變換T把這9990個數只變換成54個不同的四位數.
設a、b、c、d是M的數字,並令:
a≥b≥c≥d
因為它們不全相等,上式中的等號不能同時成立.我們計算T(M)
M(減)=1000a+100b+10c+d
M(增)=1000d+100c+10b+a
T(M)= D1= M(減)-M(增)=1000(a-d)+100(b-c)+10(c-b)+d-a=999(a-d)+90(b-c)
我們注意到T(M)僅依賴於(a-d)與(b-c),因為數字a,b,c,d不全相等,因此由a≥b≥c≥d可推出;a-d>0而b-c≥0.
此外b、c在a與d之間,所以a-d≥b-c,這就意味著a-d可以取1,2,…,9九個值,並且如果它取這個集合的某個值n,b-c只能取小於n的值,至多取n.
例如,若a-d=1,則b-c只能在0與1中選到,在這種情況下,T(M)只能取值:
999×(1)+90×(0)=0999
999×(1)+90×(1)=1089
類似地,若a-d=2, T(M)只能取對應於b-c=0,1,2的三個值.把a-d=1,a-d=2,…,a-d=9的情況下b-c所可能取值的個數加起來,我們就得到2+3+4+…+10=54
這就是T(M)所可能取的值的個數.在54個可能值中,又有一部分是數碼相同僅僅是數位不同的值,這些數值再變換T(M)中都對應相同的值(數學上稱這兩個數等價),剔除等價的因數,在T(M)的54個可能值中,只有30個是不等價的,它們是:
9990,9981,9972,9963,9954,9810,9711,9621,9531,9441,8820,8730,8721,8640,8622,8550,
8532,8442,7731,7641,7632,7551,7533,7443,6642,6552,6543,5553,5544.
對於這30個數逐個地用上述法則把它換成最大與最小數的差,至多6步就出現6174這個數.證畢.
----------------------------------------------------------------------------------
數字黑洞153
任意找一個3的倍數的數,先把這個數的每一個數位上的數字都立方,再相加,得到一個新數,然後把這個新數的每一個數位上的數字再立方、求和,......,重復運算下去,就能得到一個固定的數——153,我們稱它為數字「黑洞」。
例如:63是3的倍數,按上面的規律運算如下:
6^3+3^3=216+27=243,
2^3+4^3+3^3=8+64+27=99,
9^3+9^3=729+729=1458,
1^3+4^3+5^3+8^3=1+64+125+512=702
7^3+0^3+2^3=351,
3^3+5^3+1^3=153,
1^3+5^3+3^3=153,
...
現在繼續運算下去,結果都為153,如果換另一個3的倍數,試一試,仍然可以得到同樣的結論,因此153被稱為一個數字"黑洞".
個人在思考6174之謎時,突破點就是上面提到的495的規律。我發現無論是三位、還是四位、五位。都或多或少有自己的規律。個人認為規律的根本原因在於數字的重新排列,正是這種正反序列相減,再加上十進制的原則,讓它變得有規律。

⑸ c語言 黑洞數

#include<stdio.h>

int兆岩main(void)

{

intnumber,x,y,a,b,c,t,i,max,min,mid;

scanf("%d",&備殲number);i=1;

while(number!=495){

a=number/100;

b=number%100/10;

c=number%10;

mid=a+b+c;

max=a>b?a:b;max=max>c?max:c;

min=a>仿猜沖b?b:a;min=min>c?c:min;

mid=mid-min-max;

x=max*100+mid*10+min;

y=min*100+mid*10+max;

/*---------*/

number=x-y;

printf("%d:%d-%d=%d ",i,x,y,number);

i++;

}

return0;

}

閱讀全文

與編程黑洞陷阱相關的資料

熱點內容
台灣風月影片 瀏覽:326
彭偶么電視劇電影大全 瀏覽:291
重生井岡山林楓 瀏覽:519
日本大片網址大全 瀏覽:741
在線免費觀看完整版電影大全韓國 瀏覽:889
片子視頻破解網站 瀏覽:853
穿越抗戰時期送物資的小說 瀏覽:536
大轉折系列電影17部 瀏覽:86
蠟筆小新功夫小子國語版免費觀看 瀏覽:407
一個囚犯和一個小男孩的外國電影 瀏覽:974
yy寫的很詳細的小說 瀏覽:128
求個在線觀看的中文字幕 瀏覽:436
四台伺服器怎麼改成host 瀏覽:785
馬尾電影院今日影訊 瀏覽:815
老濕機免費看片網站 瀏覽:914
ck影院 瀏覽:942
ubuntuphpfpm安裝 瀏覽:414
末世之一女多男 瀏覽:178
電腦上如何下載稅務app 瀏覽:528
s曲線單片機 瀏覽:664