📄 numblckhl.txt
字号:
只要你输入一三位数,要求个,十,百位数字不相同,如不允许输入111,222等。那么
你把这三个数字按大小重新排列,得出最大数和最小数。再两者相减,得到一个新数,再重新排列,再相减,最后总会得到495这个数字,人称:数字黑洞。
举例:输入352,排列得532和235,相减得297;再排列得972和279,相减得693;排列得963和369,相减得594;再排列得954和459,相减得495。
任何数字,屡试不爽!
#include<stdio.h>
#include<stdlib.h>
int n=0;
void fly(int num);
int main(void)
{
int num,a[3];
do{
puts("Please input a number between 100-998");
scanf("%d",&num);
a[0]=num /100;
a[1]=(num-(num / 100)*100)/10;
a[2]=num-(num/10)*10;
}while(num<100||num>998||((a[0]==a[1])&&(a[0]==a[2])));
fly(num);
system("pause");
return 0;
}
void fly(int num)
{
int i,j,k,a[3];
int s1,s2,sum;
a[0]=num /100;
a[1]=(num-(num/100)*100)/10;
a[2]=num-(num/10)*10;
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
if(a[i]>a[j])
{
k=a[j];
a[j]=a[i];
a[i]=k;
}
s1=a[2]*100+a[1]*10+a[0];
s2=a[2]+a[1]*10+a[0]*100;
sum=s1-s2;
printf(" a[0]=%d, a[1]=%d, a[2]=%d,s1=%d,s2=%d,sum=%d\n",a[0],a[1],a[2],s1,s2,sum);
n++;
if(n>100)
{
puts("The number is too big!");
system("pause");
exit(0) ; /*退出游戏*/
}
if(sum==495)
printf("OK!The number get 495 by %d time.\n",n);
else
fly(sum);
}
数字本身做一定的对调后再相减能得出有归律的数,再有规律的运算就得出495,
Exaple:
654-456=198
-->981-189=792
-->972-279=693
-->963-369=594
-->954-459=495
怎样?看出来了吗?数学原理是怎样我倒不清楚,但可以用编程来找出规律的。
#include <stdio.h>
main(){
int num,i,a[4],j,t;
scanf("%d",&num);
while(num!=495){
i=1;
while(num){
a[i]=num%10; num=num/10;
++i;
}
for(j=1;j<=3;j++){
for(i=1;i<=j;i++){
if(a[i]>a[j]){
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
num=(a[3]*100+a[2]*10+a[1])-(a[1]*100+a[2]*10+a[3]);
printf("%d-%d",a[3]*100+a[2]*10+a[1],a[1]*100+a[2]*10+a[3]);
printf("=%d\n-->",num);
}
printf("%d\n",num);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -