最大和144的计算

版权声明: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和机器学习,寻找终极算法(我在说什么)

猜你喜欢

转载自blog.csdn.net/qq_38929220/article/details/85254980