版权声明:YESHAO https://blog.csdn.net/qq_38929220/article/details/85254980
半夜突然被同学问了道题。
心血来潮就答应帮他解了,本来想着用程序来解决比较容易,结果发现其实很不好写。下一个数的三个随机变化就是个大问题。
最后写出来的:
#include<stdio.h>
#include<stdlib.h>
#define random(x) (rand()%x)
using namespace std;
int main(){
loop:int a=19;
int sum=0;
int n=0;
int num[10];
while(sum!=144){
if(n>10){
goto loop;
}
sum=sum+a;
num[n]=a;
n++;
if(sum>144){
goto loop;
}
int x=random(4)+1;
switch(x){
case 1:
if(a+3<=19){
a=a+3;
break;
}
case 2:
if(a+1<=19){
a=a+1;
break;
}
case 3:
a=a-3;
break;
case 4:
a=a-1;
break;
}
}
for(int j=0;j<n;j++){
cout<<num[j]<<endl;
}
return 0;
}
-
为了满足从19开始且在有限数内(不能太小)满足等于144的条件使用了goto语句,使程序在发现条件不满足时即时跳出重新运行计算。
因为程序不长且不算复杂所以此处goto并不会造成混乱。 -
为了满足下一个数的随机变化使用了随机数。随机分四种情况,并保证最大不会超过19。
rand()%x 可以得到[0,x]的随机数。
得到的结果:
算一下确实是144,也满足其他的条件。
同时也可以发现随机数确实一点也不随机,最后得到的结果都是一样的,但其实还有其他的结果。想让机器了解人的复杂规则还是很困难的,所以也是为什么要学AI和机器学习,寻找终极算法(我在说什么)