站外题求助
  • 板块学术版
  • 楼主CSP_zyh
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/4/29 16:30
  • 上次更新2023/10/23 17:15:17
查看原帖
站外题求助
549886
CSP_zyh楼主2023/4/29 16:30

信奥网址

两种不同的写法,为什么一种能过一种不能过?

求!

AC:

#include<bits/stdc++.h>
using namespace std;
int n,p,q,c,d;
char ch;
int gcd(int a,int b){
	if(b==0){
		return a;
	}
	else{
		return gcd(b,a%b);
	}
}
int flag(int c,int d){
	int t=gcd(c,d);
	if(t!=1){
		c/=t;
		d/=t;
	}
	if(d==1){
		cout<<c;
		return 0;
	}
	if(c==d){
		cout<<1;
		return 0;
	}
	if(t==1){
		cout<<c<<ch<<d;
		return 0;
	}
}
int main(){
	cin>>n;
	cin>>c>>ch>>d;
	for(int i=2;i<=n;i++){
		cin>>p>>ch>>q;
		int k=d*q/gcd(d,q);
		int k1=k/d;
		int k2=k/q;
		c=p*k2+k1*c;
		d=k;
	}
	flag(c,d);
	return 0;
}

不能过的改了一下flag函数:

#include<bits/stdc++.h>
using namespace std;
int n,p,q,c,d;
char ch;
int gcd(int a,int b){
	if(b==0){
		return a;
	}
	else{
		return gcd(b,a%b);
	}
}
void flag(int c,int d){
	int t=gcd(c,d);
	if(t!=1){
		c/=t;
		d/=t;
	}
	if(d==1){
		cout<<c;
		return ;
	}
	if(c==d){
		cout<<1;
		return ;
	}
	if(t==1){
		cout<<c<<ch<<d;
		return ;
	}
}
int z;
int main(){
	cin>>n;
	cin>>c>>ch>>d;
	for(int i=2;i<=n;i++){
		cin>>p>>ch>>q;
		int k=d*q/gcd(d,q);
		int k1=k/d;
		int k2=k/q;
		c=p*k2+k1*c;
		d=k;
	}
	flag(c,d);
	return 0;
}
2023/4/29 16:30
加载中...