㈠ c語言,任何一個數字不全相同的三位數,經有限次「重排求差」操作,總得到495。所得的495即為三位黑洞數
/*重寫了一個,因為用你的變數定義排序很麻煩,而且你的變數使用有點兒亂*/
#include<stdio.h>
//#include"stdlib.h"
intmain(void)
{
intd[4],n;
inti,j,t,max,min,k,num;
printf("Inputaninteger:");
scanf("%d",&n);
num=0;
do
{
d[2]=n%10;
d[1]=(n/10)%10;
d[0]=(n/100);
if(d[0]==d[1]&&d[1]==d[2])
{
printf("InputERROR!");
return0;
}
//按位降序,並求出最大數和最小數
max=0;
min=0;
k=1;
for(i=0;i<=2;i++)
{
for(j=2;j>i;j--)
{
if(d[j]>d[j-1])
{
t=d[j];d[j]=d[j-1];d[j-1]=t;
}
}
max=max*10+d[i];
min=min+d[i]*k;
k=k*10;
}
n=max-min;
printf("%d-%d=%d ",max,min,n);
//system("pause");
num+=1;
}while(n!=495);
printf("number:%d",num);
return0;
}
㈡ 求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);
}
㈢ C語言初學者 幫忙找錯
我直接在你的程序里做注釋和修改吧
#include <stdio.h>
#include <conio.h>
void main()
{
int i,a,b,c,p,q,n;
int max (int x1,int y1,int z1);
int middle (int x2,int y2,int z2);
int min (int x3,int y3,int z3);
printf("Please input i:");
scanf("%d",i);
a=i/100;b=i%100/10;c=i%10;
p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
while (n!=495) {n=p-q;printf("%d ",n);} //這里有三個錯誤,第一是,n沒有付值,第二是,當n!=495時,輸入了n。這樣,就不能夠輸入495了。第三是,循環體裡面沒辦法求出你需要的東西。
//下面是我的我用{//}分鉛明兆開
{/
for(n=p-q;n!=495;n=p-q)
{
printf(」%d」,&n);
a=i/100;b=i%100/10;c=i%10;
p=100*max(a,b,c)+10*middle(a,b,c)+min(a,b,c);
q=100*min(a,b,c)+10*middle(a,b,c)+max(a,b,c);
}
printf(」%d」,&n);
/}
getch();
}
int max (int x1,int y1,int z1)
{
int e;
if (x1>y1) e=x1;else e=y1;
if (e<z1) {e=z1;return(e);}
else return(e);
}
int min (int x2,int y2,int z2)
{
int e;
if (x2<y2) e=x2;else e=y2;
if (e>z2) {e=z2;return(e);}
else return(e);
}
int middle (int x3,int y3,int z3)
{
int e;
if ((x3-y3)<0 && (x3-z3)>0) {e=x3;return(e);}
if ((y3-x3)<0 && (y3-z3)>0) {e=x3;return(e);}
if ((z3-x3)<0 && (z3-y3)>0) {e=x3;return(e);}
}//這里也有點錯誤,有沒有留意,每次你都是返回了x3;
應該相對槐陪應改槐租為,y3,z3;
上面的代碼請不要直接復制到c語言編輯器裡面,因為字體問題,可能導致編譯出錯。麻煩一個一個打進去。謝謝
㈣ 數字"黑洞"
黑洞數又稱陷阱數,是類具有奇特轉換特性的整數。 任何一個數字不全相同整數,經有限「重排求差」操作,總會得某一個或一些數,這些數即為黑洞數。"重排求差"操作即組成該數得排後的最大數去重排的最小數。
舉個例子,三位數的黑洞數為495
簡易推導過程:隨便找個數,如297,三個位上的數從小到大和從大到小各排一次,為972和279,相減,得693
按上面做法再做一次,得到594,再做一次,得到495
之後反神顫殲復都得到495
再如,四位數的黑洞數有6174
神秘的6174-黑洞數
隨便造一個游沖四位數,如a1=1628,先把組成部分1628的四個數字由大到小排列得到a2=8621,再把1628的四個數字由小到大排列得a3=1268,用大的減去小的a2-a1=8621-1268=7353,把7353按上面的方法再作一遍,由大到小排列得7533,由小到大排列得3357,相減7533-3367=4176
把4176再重復一遍:7641-1467=6174。
如果再往下作,奇跡就出現了!7641-1467=6174,又回到6174。
這是偶然的嗎?我們再隨便舉一個數1331,按上面的方法連續去做:
3311-1133=2178 8721-1278=7443 7443-3447=3996 9963-3699=6264
6624-2466=4174 7641-1467=6174
好啦!6174的「幽靈」又出現了,大家不妨試一試,對於任何一個數字不完全的四位數,最多運算7步,必然落入陷阱中。
這個黑洞數已經由印度數學家證明了。
在數學中由有很多有趣,有意義的規律等待我們去探索和研究,讓我們在數學中得到更多的樂趣。
蘇聯的科普作家高基莫夫在他的著作《數學的敏感》一書中,提到了一個奇妙的四位數6174,並把它列作「沒有揭開的秘密」。不過,近年來,由於數學愛好者的努力,已經開始撥開迷霧。
6174有什麼洞歲奇妙之處?
請隨便寫出一個四位數,這個數的四個數字有相同的也不要緊,但這四個數不準完全相同,例如 3333、7777等都應該排除。
寫出四位數後,把數中的各位數字按大到小的順序和小到大的順序重新排列,將得到由這四個數字組成的四位數中的最大者和最小者,兩者相減,就得到另一個四位數。將組成這個四位數的四個數字施行同樣的變換,又得到一個最大的數和最小的數,兩者相減……這樣循環下去,一定在經過若干次(最多7次)變換之後,得到6174。
例如,開始時我們取數8208,重新排列後最大數為8820,最小數為0288,8820—0288=8532;對8532重復以上過程:8532-2358=6174。這里,經過兩步變換就掉入6174這個「陷階」。
需要略加說明的是:以0開頭的數,例如0288也得看成一個四位數。再如,我們開始取數2187,按要求進行變換:
2187 → 8721-1278=7443→7443-3447=3996→9963-3699=6264→6642-2466=4176→7641-1467=6174。
這里,經過五步變換就掉入了「陷阱」——6174。
拿6174 本身來試,只需一步:7641-1467=6174,就掉入「陷阱」祟也出不來了。
所有的四位數都會掉入6174設的陷阱,不信可以取一些數進行驗證。驗證之後,你不得不感嘆6174的奇妙。
任何一個數字不全相同整數,經有限次「重排求差」操作,總會得某一個或一些數,這些數即為黑洞數。"重排求差"操作即組成該數得排後的最大數去重排的最小數。
黑洞數的性質及應用
【摘要】本文提出建立了黑洞數的概念,分別對整數黑洞數、模式黑洞數、方冪余式黑洞數的一般性質做了闡述。並給出了二元一次方程 ax- by- c =0的求根法則。
【關鍵詞】 黑洞數、 整數黑洞數 、 模式黑洞 數 、方冪余式黑洞數。
【引言】 在日常學習計算中,化簡含有未知數的代數式或方程經常會得到x-x=0之結果。此前,人們只是把這種情況定義為「此算式沒有意義」而終結。黑洞數理論的出現 ,讓人們看到了代數式或方程中未知數可任意取值時的另一層含義。本文提出證明的方冪余式黑洞數定理,揭示出a, m不互素條件下的余數循環規律,它將與歐拉余數定理互為補充,構造出全體整數的方冪式除法余數運演算法則。本文給出的二元一次方程ax-by-c=0的求根公式,將成為余數新理論應用的一個範例。
定義1、在含有未知數變數的代數式中,當未知數變數任意取值時其運算結果都不改變,我們把這時的數字結果叫黑洞數。根據運算性質的不同,我們把黑洞數分為以下三種類型:Ⅰ、整數黑洞數 Ⅱ、模式黑洞數 Ⅲ、方冪余式黑洞數
Ⅰ、整數黑洞數
在前文《模根因數定理與模根剩餘法判定素數》中,在建立選加因數概念後,我們證明了整數因數定理:
若a、b都是大於1的整數,且有g = ab,則有:
g+an=a(b+n)
其中 : n = 0、1、2、3……
根據整數因數定理,我們即可得到如下整數黑洞數
ab+an
--------------- = a
b+n
其中: n = 0、1、2、3 ……
這里,不論未知變數怎樣取值,上式的結果都等於a.。
例如:取a=7, b=3,ab=21, 則有:
21+7n
---------------- = 7
3+n
其中: n = 0、1、2、3 ……
應用方面的例子:
全體偶數 = 2 (n) + 2, ( n = 0、1、2、3 ……)
自然數中的全部合數 = 4 +2n + h(2+n)
其中: n = 0、1、2、3 ……
對n的每個取值都重復取
h = 0、1、2、3 ……
Ⅱ、模式黑洞數
模式黑洞數是指模的同餘式mn+L條件下的黑洞數。 在前文《模根因數定理與模根剩餘法判定素數》一文中,模根因數定理(1)式:
若 a>1, b>1,且 ab = mk + L,則有:
m(k+aN)+L
-------------------------- = a
b+mN
其中:N = 0、1、2、3 ……
這時的a值就是模式黑洞數。
應用實例:
取a=7, b=13, 則 ab= 91=mk + L = 2×45×1
2(45+7N)+1
根據上式得到:-------------------------- =7
13+2N
其中:N = 0、1、2、3 ……
應用實例:素數通式定理
若ap是同餘式2N+1模根數列的條件剩餘數,
當 ap ≠ 4 + 3n + h (3 +2n ) 時
其中:n = 0、1、2、3 ……
對n的每個取值都重復取
h = 0、1、2、3 ……
則條件通式 2+1 的值恆是素數。
模式黑洞數性質是我們建立素數代數理論體系的根本前提。
Ⅲ、方冪余式黑洞數
在方冪余式除法 a^n÷m ≡L關系中,當得到 L^n÷m ≡L 時 (n = 1、2、3 ……), 我們稱這時的L為因數a的m值黑洞數。
例如:在 3×5 = 15 關系時
我們得到: 3^4÷15 ≡ 6
這時有: 6^n÷15 ≡ 6 (n = 1、2、3 ……)
所以我們稱6是因數3的15值的方冪余式黑洞數。
為了方便,我們引入符號 ⊙(m)a = L 來表示方冪余式黑洞數關系。即上式結果可表示為 ⊙(15)3 = 6,符號「⊙」在這里讀作黑洞數。
下面我們將證明方冪余式黑洞數定理;
定理1: 如a>1, b>1,(a ,b)=1 且 ab = m ;
則有:a^ф(b)≡⊙ (mod m)
即這時:⊙^n ≡⊙ (mod m)
其中:n = 1、2、3 ……
證:我們分別對b為素數,b為素數乘方,b為多個素數乘積時的情況加以證明。
當b為素數時:
取a=7, b=19, 則 ab = 7×19 = 133
由定理關系得到:
7^ф(19)=7^18≡77 (mod 133)
而 77^n≡77 (mod 133) 此時定理關系成立
當b為素數的n次乘方時:
取 a = 7, b=5^2=25, 則 ab = 7×25 = 175
由定理關系得到:
7^ф(25)=7^20≡126 (mod 175)
而 126^n≡126 (mod 175) 此時定理關系也成立
當b為多個素數乘積時:
取 a = 7, b= 3×11=33,則 ab = 7×33 = 231
由定理關系得到:
7^ф(33)=7^20≡133 (mod 231)
而 133^n≡133 (mod 231) 所述定理關系式成立
故定理1得證
方冪余式黑洞數的一些性質及應用:
1、因數a的黑洞數減1的平方除m的余數是因數b的黑洞數;
即:如 ⊙(m)a = e1, 則 (e1-1)^2÷m ≡ e2 = ⊙(m)b
2、m所含黑洞數的個數等於m所含素因數個數做為2底方次數減2;
即:m為素數沒有黑洞數
m有2個素因子時有2^2-2 = 2個黑洞數
m含有3個素因子時有2^3-2 = 6個黑洞數
3、在m定值後,如果把全部 an (n = 1、2、3 …… 但n≠b) 值都做為底數,這時的
a^c÷m≡⊙的c值變化規律。與m的余數循環節a^c÷m≡1規律具有相同的變節和不變節特性。
即: 若 7^10≡⊙ (mod m) 關系成立,
則 (7^2)5≡⊙ (mod m) 關系也成立;
應用方面的例子:
若 b>c ,我們有以下二元一次方程 ax -by -c = 0 求根法則:
首先: 取 ab = m
計算: a^ф(b)÷m ≡ ⊙
計算: ⊙×c ÷m ≡S1
計算: (⊙-1)×c ÷m ≡S2
x =S1÷a
這時
y =S2÷b
這時的 x,y 值是方程的最小整數根。
但方程 ax- by- c = 0 有無限多組整數根,它的全部整數根集可表示為:
x = S1÷a + b n
y = S2÷b + a n
其中:n = 0、1、2、3 ……
實例1:求方程 13x- 7y -3 = 0 的最小整數根和全部整數根?
首先: 取13×7 = 91
計算: 13^ф(7)=13^6÷91 ≡ 78
計算: 78×3÷91 ≡52
計算: (78-1)×3÷91 ≡49
x =52÷13=4
這時
y =49÷7=7
這時的 x,y 值是方程的最小整數根。
但方程 ax- by- c = 0 有無限多組整數根,它的全部整數根集可表示為:
x = 4 + 7n
y = 7 + 13n
其中:n = 0、1、2、3 ……
實例2:求方程 13x- 8y +4 = 0 的最小整數根和全部整數根?
首先: 取13×8 = 104
計算: 13^ф(8)=13^4÷91 ≡ 65
計算: 65×(-4)÷104 ≡ -52≡52
計算: (65-1)×(-4)÷104 ≡ -48≡56
x =52÷13=4
這時
y =56÷8=7
這時的 x,y 值是方程的最小整數根。
但方程 13x- 8y +4 = 0 有無限多組整數根,它的全部整數根集可表示為:
x = 4 + 8n
y = 7 + 13n
其中:n = 0、1、2、3 ……
隨著時間的推移,相信人們會看到黑洞數理論的更多成果。
㈤ C語言出錯驗證3位黑洞數
#include<stdio.h>
int sub(int i)
{
int p,k,j,h,max,min,a[4];
a[1]=i/100;
a[2]=(i/10)%10;a[3]=i%10;
for(k=1;k<=2;k++)
for(j=k+1;j<=3;j++)
if(a[k]<a[j])
{ h=a[k];a[k]=a[j];a[j]=h; }
max=a[1]*100+a[2]*10+a[3];
min=a[3]*100+a[2]*10+a[1];
p=max-min;
if(p<100 && p/10==p%10) p=0;
return (p);
}
int main()
{
int n,n1,y,i,m;
printf(" 驗證任意3位數'重排求差'操作,可於495或0.");
for(y=0,n=101;n<=999;n++)//修改n的取值范圍,可求出最多的轉換次數
{
i=n;m=0;
while(i!=495 && i!=0)
{ i=sub(i);m++; }
if(m>y) { y=m;n1=n; }
}
printf(" 當n=%d時,最多轉換%d次可至495或0:",n1,y);
printf(" %d",n1);
i=n1;
while(i!=495 && i!=0)
{ i=sub(i);printf("->%d",i); }
return 0;
}
㈥ C語言或C++的 數學黑洞問題,我好像陷入了死循環。求幫忙
當J=0時,第二個for語句中的i<4-j也就是i<4,i++,這樣的話i最大可以達到3
而在下面的語句中有個S[i+1]也就是S[4],這意味著數組的長度是5個,而你只定義了4的長度
數組長度溢出了
而且那個前後調換的函數貌似也有問題
應該是s[i]=s[i+1]而不是s[j]=s[i+1]
i 和 j 打錯了是不是
㈦ C語言中的一道題數字黑洞:
沒有去考慮你的邏輯,但至少有一處你錯了,
main函數中,數組a沒有指定大小,不能a[n]企圖通過輸入的n隨時改變數組的大小。必須在運行前就指定。
㈧ 關於黑洞數的編程(學不好C語言的娃兒,求教)
上面的回答很正確,要改一下這兒:
if(a>b)swap(&a,&b);
if(a>c)swap(&a,&c);
if(b>c)swap(&b,&c);
此程序就是輸入一個3位數,然後,把該三位數的3個數字變換順序使變成最小的數和最大的數,輸出兩者之差,然後把這個差中的3位數調換順序,使之變成最小的數和最大的數,再把兩者的差值輸出。比如說輸入數為123,則第一個數為:321-123=198,第二個數為:981-189=792,第三個數為:972-279=693,第四個數為:963-369=594,以此類推,直到輸出8個數為止。
㈨ 關於數字黑洞495和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這個數.證畢.參考資料:http://ke..com/view/406175.html?wtp=tt
㈩ c語言 黑洞數
#include<stdio.h>
intmain(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;
}