GitBook

这里写图片描述 这里写图片描述

当时心里想: “数据给的不大 暴力遍历就好了……” 包括刚才也是这么想的 但是仔细一看我这一题没对啊…… 也就是这个:

#include<stdio.h>
#include<math.h>
int main() {
	int min,a,b,c;
	int n,x,y,z;
	scanf("%d",&n);
	for(min=300,x=1; x<=100; x++) {
		for(y=x; y<=100; y++) {
			for(z=y; z<=100; z++) {
				if((pow(x,n)+pow(y,n))==pow(z,n)&&min>(x+y+z)) {
					min=x+y+z;
					a=x;
					b=y;
					c=z;
				}
			}
		}
	}
	if(min!=0)
		printf("%d %d %d\n",a,b,c);
	else
		printf("-1\n");
	return 0;
}

根据郑轻OJ上的是WA 然后给出应该是 -1 结果我是输出的 1 40 40 也就是对n=10的那一种情况运算错误了

本以为是数据范围的问题 然后重新写了一下:

#include<stdio.h>
#include<math.h>
int main() {
	double min,n,x,y,z;
	scanf("%lf",&n);
	for(x=1; x<=100; x++) {
		for(y=x; y<=100; y++) {
			for(z=y; z<=100; z++) {
				if(pow(x,n)+pow(y,n)==pow(z,n)) {
					printf("%.lf %.lf %.lf\n",x,y,z);
					x=y=z=102;
				}
			}
		}
	}
	if(x<102)
		printf("-1\n");
	return 0;
}

但是发现对n=10的还是不对 仔细想想100的10次方的运算确实数据好大

然后百度了一下 这一题好像涉及到了费马大定理……

百度百科:费马大定理

然后指出:

费马大定理,又被称为“费马最后的定理”,由法国数学家费马提出。 它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。 被提出后,经历多人猜想辩证,历经三百多年的历史,最终在1995年被英国数学家安德鲁·怀尔斯证明。

所以这一题应该是当 n==1||n==2 时输出结果 n>2时都是应该输出-1 也就是代码应该这样写:

#include<stdio.h>
int main() {
	int n;
	scanf("%d",&n);
	if(n==1)
		printf("1 1 2\n");
	else if(n==2)
		printf("3 4 5\n");
	else
		printf("-1\n");
	return 0;
}

上传之后AC了…… -.-

话说人家的学校11月份就做这题? 唉…… 看来果然还是一直被压制啊……

题目地址:【郑轻】[1753]Math Two!