洛谷P1888 三角函数

记录自己做题的时候犯的错误


单纯记录一下蒟蒻的敲代码练习过程

题目

洛谷搜P1888

第一遍做法

有点晕乎,第一遍看题认为只要选出最小边和最大边就可以,但跑了一次,只有80分,自己运行的时候发现6 8 10这组数据,得数没有约分。。。(很烂的代码)

#include<iostream>
using namespace std;
int a[3];
long long int minn=1000000000;
long long int maxx;
double sinn;
int l,r;
int main(){
	cin>>a[0]>>a[1]>>a[2];
	for(int i=0;i<3;i++){
		if(a[i]<minn){
			minn=a[i];
		}
		if(a[i]>maxx){
		maxx=a[i];	
		}
	}
	cout<<minn<<"/"<<maxx<<endl;
}

然后我才意识到,这一题简单之中的难点,在于约分
看到题解里有大佬取巧设置了对这一组测试数据的特殊判断,想法很不戳,但想到ccf csp考试的时候看不到测试样例,我还是老实一点
实现gcd函数对数据进行约分:(借鉴了大佬的辗转相除法代码)

int gcd(int x,int y){
	int t=x%y;
	while(t!=0){
		x=y;
		y=t;
		t=x%y;
	}
	return y;
}

第二遍做法

#include<iostream>
using namespace std;
int a[3];
long long int minn=1000000000;
long long int maxx;
double sinn;
int l,r;
int gcd(int x,int y){
	int t=x%y;
	while(t!=0){
		x=y;
		y=t;
		t=x%y;
	}
	return y;
}
int main(){
	cin>>a[0]>>a[1]>>a[2];
	for(int i=0;i<3;i++){
		if(a[i]<minn){
			minn=a[i];
		}
		if(a[i]>maxx){
		maxx=a[i];	
		}
	}
	int gcdd=gcd(minn,maxx);
	minn=minn/gcdd;
	maxx=maxx/gcdd;
	cout<<minn<<"/"<<maxx<<endl;
}

然后终于AC了。。。

上一篇:E. Tree Shuffling(树上问题 + 贪心 )


下一篇:VMare Workstation 安装Ubuntu 虚拟机教程