记录自己做题的时候犯的错误
单纯记录一下蒟蒻的敲代码练习过程
题目
洛谷搜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了。。。