输出样例1:
1/6
结尾无空行
输入样例2:
2
4/3 2/3
输出样例2:
1
参考答案:
答案一(部分正确)
改自: C语言:7-33 有理数加法.2021-08-13_慕容雪羽-CSDN博客
#include<stdio.h>
int main()
{
void fen_sum(int a1,int b1,int a2,int b2,int *a,int *b);
int myprime(int *a,int *b);
int fen_average(int *a,int *b,float N);
//最简分数,是分子、分母只有公因数1的分数
int a1,b1,a2,b2,a,b,n;
float N;
scanf("%d",&n);
N=n;
scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);
//printf("%d/%d %d/%d",a1,b1,a2,b2);
fen_sum(a1,b1,a2,b2,&a,&b);
while(n-2)
{
a1=a;
b1=b;
scanf("%d/%d",&a2,&b2);
fen_sum(a1,b1,a2,b2,&a,&b);
n--;
}
//printf("%d/%d\n",a,b);
fen_average(&a,&b,N);
//printf("%d/%d\n",a,b);
if(myprime(&a,&b)) printf("%d",a);
else printf("%d/%d",a,b);
}
void fen_sum(int a1,int b1,int a2,int b2,int *a,int *b)//两分数求和
{
*b=b1*b2;
*a=a1*b2+a2*b1;
//printf("%d %d\n",*a,*b);
}
int myprime(int *a,int *b)//最简分数(分子分母互质),若分母为1,返回1,否则返回0
{
int i=*a;//i除数
while(1<i)
{
if(0==*b%i&&0==*a%i)
{
*b/=i;
i=*a/=i;
//i=*a
}
i--;
}
//printf("%d %d\n",*a,*b);
if (1==*b) return 1;
return 0;
}
int fen_average(int *a,int *b,float N)//分数 平均数
{
float x,y;
x=*a/N;
while(0!=x-(int)x)//分子整数化
{
x*=10;
y*=10;
*a=x;
*b=y;
}
*a=x;
}
答案2(部分正确):
#include<stdio.h>
int main()
{
void fen_sum(int a1,int b1,int a2,int b2,int *a,int *b);
int myprime(int *a,int *b);
int fen_average(int *a,int *b,float N);
//最简分数,是分子、分母只有公因数1的分数
int a1,b1,a2,b2,a,b,n;
float N;
scanf("%d",&n);
N=n;
scanf("%d/%d %d/%d",&a1,&b1,&a2,&b2);
myprime(&a1,&b1);
myprime(&a2,&b2);
//printf("%d/%d %d/%d",a1,b1,a2,b2);
fen_sum(a1,b1,a2,b2,&a,&b);
while(n-2)
{
myprime(&a,&b);
a1=a;
b1=b;
scanf("%d/%d",&a2,&b2);
myprime(&a2,&b2);
fen_sum(a1,b1,a2,b2,&a,&b);
n--;
}
//printf("%d/%d\n",a,b);
fen_average(&a,&b,N);
//printf("%d/%d\n",a,b);
if(myprime(&a,&b)) printf("%d",a);
else printf("%d/%d",a,b);
}
void fen_sum(int a1,int b1,int a2,int b2,int *a,int *b)//两分数求和
{
*b=b1*b2;
*a=a1*b2+a2*b1;
//printf("%d %d\n",*a,*b);
}
int myprime(int *a,int *b)//最简分数(分子分母互质),若分母为1,返回1,否则返回0
{
int i=*a;//i除数
while(1<i)
{
if(0==*b%i&&0==*a%i)
{
*b/=i;
i=*a/=i;
//i=*a
}
i--;
}
//printf("%d %d\n",*a,*b);
if (1==*b) return 1;
return 0;
}
int fen_average(int *a,int *b,float N)//分数 平均数
{
float x,y;
x=*a/N;
while(0!=x-(int)x)//分子整数化
{
x*=10;
y*=10;
*a=x;
*b=y;
}
*a=x;
}