【暴力循环】(2015)第六届蓝桥杯省赛 C/C++ A组 题解(第一题)

本文探讨了方程a^2+b^2+c^2=1000的整数解问题,提供了三种不同条件下的求解思路及C++实现代码。包括允许负数解、仅考虑正整数解和自然数解的情况,并通过暴力枚举方法找到符合条件的最小解。

第一题 

题目

方程整数解
方程: 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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值