当前位置:编程学习 > C/C++ >>

C++写程序

“数学黑洞”,任意一个4为自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,之差仍为一个自然数,重复进行上述运算,会发现一个神秘的数。
答案:在数学中也有这种神秘的黑洞现象,对于数学黑洞,无论怎样设值,在规定的处理法则下,最终都将得到固定的一个值,再也跳不出去了,就像宇宙中的黑洞可以将任何物质(包括运行速度最快的光)牢牢吸住,不使它们逃脱一样。这就对密码的设值破解开辟了一个新的思路。
【一】123黑洞
(即西西弗斯串)
数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的
黑洞值:
设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,
例如:1234567890,
偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。
奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。
总:数出该数数字的总个数,本例中为 10 个。
新数:将答案按 “偶-奇-总” 的位序,排出得到新数为:5510。
重复:将新数5510按以上算法重复运算,可得到新数:134。
重复:将新数134按以上算法重复运算,可得到新数:123。
结论:对数1234567890,按上述算法,最后必得出123的结果,我们可以用计算机写出程序,测试出对任意一个数经有限次重复后都会是123。换言之,任何数的最终结果都无法逃逸123黑洞。
【二 】 任意N位数的归敛的卡普雷卡尔黑洞
取任何一个4位数(4个数字均为同一个数字的例外),将组成该数的4个数字重新组合成可能的最大数和可能的最小数,再将两者的差求出来;对此差值重复同样的过程(例如:开始时取数8028,最大的重新组合数为8820,最小的为0288,二者的差8532。重复上述过程得出8532-2358=6174),最后总是达到卡普雷卡尔黑洞:6174。称之“黑洞”是指再继续运算,都重复这个数,“逃”不出去。把以上计算过程称为卡普雷卡尔运算,这个现象称归敛,其结果6174称归敛结果。
一, 任意N位数都会类似4位数那样归敛(1、2位数无意义) . 3位数归敛到唯一一个数495; 4位数归敛到唯一一个数6174; 7位数归敛到唯一一个数组( 8个7位数组成的循环数组______称归敛组);其它每个位数的数归敛结果分别有若干个,归敛数和归敛组兼而有之(如14位数____共有9×10的13次方个数____的归敛结果有6个归敛数,21个归敛组).
一旦进入归敛结果,继续卡普雷卡尔运算就在归敛结果反复循环,再也“逃”不出去。
归敛组中各数可以按递进顺序交换位置 (如a → b → c 或 b → c → a 或c → a → b)
归敛结果可以不经过卡普雷卡尔运算就能从得出.
某个既定位数的数,它的归敛结果的个数是有限的,也是确定的.
二,较多位数的数(命它为N)的归敛结果是由较少位数的数(命它为n, N>n)的归敛结果,嵌加进去一些特定的数或数组而派生形成. 4、6、8、9、11、13的归敛结果中的8个称基础数根.它们是派生所有任意N位数的归敛结果的基础.
1, 嵌加的数分三类.
第一类是数对型,有两对: 1)9,0 2)3,6
第二类是数组型,有一组:
7,2
5,4
1,8
第三类是数字型,有两个:
1) 5 9 4
2) 8 6 4 2 9 7 5 3 1
2, 嵌入数的一部分嵌入前段中大于或等于嵌入数的最末一个数字的后邻位置。另一部分嵌入后段相应位置_____使与嵌入前段的数形成层状组数结构。
594只能嵌入n=3+3К 这类数。如9、12、15、18…….位.
3, (9,0)、(3,6)两对数可以单独嵌入或与数组型、数字型组合嵌入。
数组
7,2
5,4
1,8
必须“配套”嵌入并按顺序: (7,2)→(5,4)→(1,8) 或 (5,4)→(1,8)→(7,2)
或 (1,8) →(7,2) →(5,4)。
4, 可以嵌如一次、二次或若干次 (则形成更多位数的归敛结果).
任意N 位数的归敛结果都 “隐藏”在这N位数中, 卡普雷卡尔运算只是找出它们而不是新造成它们.
参考资料:
1, 美国《新科学家》,1992,12,19
2, 中国《参考消息》,1993,3,14-17
3, 王景之: ⑴ 也谈数学“黑洞”——关于卡普雷卡尔常数
⑵ 我演算得到的一部分归敛结果
4, 天山草 : 能够进行任意多位数卡普雷卡尔(卡布列克) 运算的程序。
【三】自恋性数字
除了0和1自然数中各位数字的立方之和与其本身相等的只有153、370、371和407(此四个数称为“水仙花数”)。例如为使153成为黑洞,我们开始时取任意一个可被3整除的正整数。分别将其各位数字的立方求出,将这些立方相加组成一个新数然后重复这个程序。
除了“水仙花数”外,同理还有四位的“玫瑰花数”(有:1634、8208、9474)、五位的“五角星数”(有54748、92727、93084),当数字个数大于五位时,这类数字就叫做“自幂数”。

参考资料: http://baike.zhaoxi.net/view/914438.html?wtp=tt
我不明白,之差为一个自然数,可是如果这个自然数不是四位数,而是三位数或者两位数甚至一位数也按照上述运算还是说如果不是四位数了就停止?可是如果是3333这一类的四个数都一样的怎么办,不是一下子 就结束了么

#include <iostream>
#include<vector>
#include<algorithm>


using namespace std;


vector<int> mys(4,0);


void input(){
cout<<"输入一个4位数,各位数相等的除外,如“1111”"<<endl;
int tem;


while(cin>>tem,tem>9999)
cout<<"输入不符合规范,请重新输入"<<endl;


mys[0]=tem%10;tem/=10;
mys[1]=tem%10;tem/=10;
mys[2]=tem%10;tem/=10;
mys[3]=tem;


if(mys[0]==mys[1]&&mys[0]==mys[2]&&mys[0]==mys[3]){cout<<"重新输入"<<endl;input();}
}
void black(int &x){
static int is=1;
sort(mys.begin(),mys.end());
int m1=1000*(mys[3])+100*(mys[2])+10*(mys[1])+mys[0];
int m2=1000*(mys[0])+100*(mys[1])+10*(mys[2])+mys[3];
int temp=m1-m2;
cout<<"第"<<is++<<"步:"<<m1<<"-"<<m2<<"="<<temp<<endl;


if(temp!=x){


x=temp;


mys[0]=temp%10;temp/=10;
mys[1]=temp%10;temp/=10;
mys[2]=temp%10;temp/=10;
mys[3]=temp;

black(x);
}else{
is-=2;
cout<<"到第"<<is<<"步开始稳定"<<endl;
}
}


int main(){
input();
int x=0;
black(x);
cout<<"黑洞数字x = "<<x<<endl;

getchar();
getchar();
return 0;
}

上一个:C++贪吃蛇
下一个:C++问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,