C 语言破解神奇读心术

摘自:教育网-自学之路:http://www.selfroad.com.cn/content.asp?id=84

“吉普赛人祖传的神奇读心术.它能测算出你对心爱之人的内心感应”
提示:
任意选择一个两位数(或者说,从10~99之间任意选择一个数),把这个数的十位与个位相加,再把任意选择的数减去这个和。例如:你选的数是23,然后2+3=5,然后23-5=18
在图表中找出与最后得出的数所相应的图形,并把这个图形牢记心中,然后点击水晶球。你会发现,水晶球所显示出来的图形就是你刚刚心里记下的那个图形。

嘿嘿...怎么样?真是太神奇了,大家可以来试试……

难道计算机程序真的能测出我心中在想什么? 如果想知道究竟什么原因

1 神奇,搞蒙了

   当时网友给我这个东西,测了几次,开始感觉很是神奇,这是怎么回事,难道计算机程序真的能测出我心中在想什么?

2  C程序测试

我是一名计算机程序员,我决不相信计算机程序能读出人的心术,至少目前技术不可能?测了几次后,想用一段 C 程序帮我测试这个读心术的奥秘。

设想:为什么要有这个规则,直接猜数字看图,不要加减法,不是更简单吗

实验目的:列举10~99 中所有的数据,经过规则转换后,得到什么数据

环境 C 语言(VC6,VC8 等等)

代码如下:

#include <stdio.h>

int main(int argc, char* argv[])

{

int sum;

for(int w=10;w<=99;w++){

int i=w/10;//十位

int j=w%10;//个位

sum=w-(i+j);//通过规则得到的结果

printf("10~99之间任意选择的任意数是%d,十位:%d,个位:%d,按规则得到数据:%d/n",w,i,j,sum);

}

return 0;

}

运行结果如下

……

10~99之间任意选择的任意数是17,十位:1,个位:7,按规则得到数据:9

10~99之间任意选择的任意数是18,十位:1,个位:8,按规则得到数据:9

10~99之间任意选择的任意数是19,十位:1,个位:9,按规则得到数据:9

10~99之间任意选择的任意数是20,十位:2,个位:0,按规则得到数据:18

10~99之间任意选择的任意数是21,十位:2,个位:1,按规则得到数据:18

……

3 分析,讨论

由程序运行结果,你会发现一个规律:

        我们选:10:10-(1+0) = 9

        我们选:11:11-(1+1) = 9

        我们选:18:18-(1+8) = 9

        我们选:19:19-(1+9) = 9

        我们选:20:20-(2+0) = 18

        我们选:29:29-(2+9) = 18

        我们选:30:30-(3+0) = 27

        我们选:40:40-(4+0) = 36

        我们选:50:50-(5+0) = 45

        我们选:55:55-(5+5) = 45       

        我们选:60:60-(6+0) = 54

        我们选:80:80-(8+0) = 72

        我们选:99:99-(9+9) = 81

我们通过以上数据,当然,你也可能通过更大量的数据进行分析,我们发现一个规律,即结果都是9的倍数(9x),这不是很奇怪吗?

且,两个人所所选择结果是不同的,但是图案是相同的,我们则会想到:

f(a) = y

f(b) = y

f(c) = y

即:结果与图案不是单映射函数,它应该是一个多源单值映射函数。

4 结论

通过心上分析,我们可以结论如下:   

设十位数字为X,个位数字为Y,则有

(10X+Y)-(X+Y)=9X

结论一:按照原文的算法,得出的结果一定是9的倍数.所以。

结论二:结果与图标是多源单值映射函数,即取所有值为9X的值为同一个值。

这就是神奇的读心术原理吧?

5 附录

C 程序模拟神奇读心术:(希望你能看懂)

吉普赛人的程序奥妙之谜,

#include <time.h>

main(){

time_t t;

int a[100],i;

unsigned char b[70],x;

srand(time(&t));

do

{//clrscr();

for(i=0;i<70;i++) b[i]=(unsigned char)rand()%70+180;

printf("这是一个吉普赛人神奇的读心术:具体玩法为:/n"

"    想一个两位数的整数,将该数减去十位和个位数字后得一个新数s ,"

"在下表中查找到s 对就的图案,记住后按空格键,你可以发现计算机"

"已经知道了你想到的那个图案,试试吧!/n");

for(i=1;i<100;i++)  a[i]=b[rand()%70];

x=b[rand()%70];

for(i=9;i<90;i+=9)  a[i]=x;

for(i=1;i<100;i++)

{printf("%2d:%c   ",i,a[i]);

if(i%12==0)printf("/n/n");

}

printf("/n想好了,看好了按任意键吧!");

getch();

printf("/n你想好的那个图案是:%c/n按空格键继续玩,按“”结束!",x);

x=getch();

}

while(x!='0');

printf("/n谢谢您对本魔术的喜爱!再见!");

}

这就是所谓的吉普赛人的读心术的原理,他的主要程序段,还是不错的。

你可能感兴趣的:(c,算法,测试,语言,破解,图形)