(2015)第六届蓝桥杯省赛(软件类) C/C++ 大学A组 题解(第一题)

时间:2022-09-09 21:38:50

第一题 

题目

方程整数解
方程: a^2 + b^2 + c^2 = 1000
(或参见【图1.jpg】)
这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。
你能算出另一组合适的解吗?
请填写该解中最小的数字。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

思路分析

直接暴力枚举,可能出现的a,b,c。

代码

1、因为此题没有要求a,b,c必须为正整数或者是自然数,那么可以为负数

答案1

-30
#include <iostream>
using namespace std;

int main(int argc, char** argv) {
	int a,b,c;
	int num=1000;
	for(int a=-33;a<33;a++){//很暴力的三次循环 
		for(int b=-33;b<33;b++){
			for(int c=-33;c<33;c++){
				if(a*a+b*b+c*c==1000){
					if(min(min(a,b),c)!=6){//确保不会出现6,8,30的情况 
						int tmp=min(min(a,b),c);
				     	if(tmp<num){//不必再限制tmp>0 
						num=tmp;
				    	}
					}
				}
			}
		}
	}
	cout<<num<<endl;
	return 0;
}

2、若此题要求a,b,c必须为正整数;

答案2

10

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
	int a,b,c;
	int num=1000;
	for(int a=0;a<33;a++){//很暴力的三次循环 
		for(int b=0;b<33;b++){
			for(int c=0;c<33;c++){
				if(a*a+b*b+c*c==1000){
					if(min(min(a,b),c)!=6){//确保不会出现6,8,30的情况 
						int tmp=min(min(a,b),c);
				     	if(tmp<num&&tmp>0){
						num=tmp;
				    	}
					}
				}
			}
		}
	}
	cout<<num<<endl;
	return 0;
}

3、若此题要求a,b,c都是自然数;

答案3

0

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
	int a,b,c;
	int num=1000;
	for(int a=0;a<33;a++){//很暴力的三次循环 
		for(int b=0;b<33;b++){
			for(int c=0;c<33;c++){
				if(a*a+b*b+c*c==1000){
					if(min(min(a,b),c)!=6){//确保不会出现6,8,30的情况 
						int tmp=min(min(a,b),c);
				     	if(tmp<num){//不必再限制tmp>0 
						num=tmp;
				    	}
					}
				}
			}
		}
	}
	cout<<num<<endl;
	return 0;
}