目录
- 🍋问题描述
- 🍋解题思路
- 🍋解题代码
🍋问题描述
题目描述
正方形边长为1,E是对角线BD上一点,F是边AB上一点,已知|DE|=ab|DB|,|BF|=cd|AB|,求△CEF的面积。
输入格式
第一行是一个整数T(1≤T≤1000),表示样例的个数。
每个样例一行为四个整数a,b,c,d,0≤a≤b≤10000,0≤c≤d≤10000,(a,b)=1,(c,d)=1。
输出格式
依次每行输出三角形的面积,如果三角形退化为一条线段,输出0,否则输出一个分数,格式为p/q,(p,q)=1。
样例输入
2
1 2 1 1
1 3 1 3
样例输出
0
5/18
🍋解题思路
读完题目,发现是个数学问题。
以E为顶点,将紫色部分分成三个三角形,利用同高三角形的面积与底边呈正比的性质,进行数学分析,最终可得: 所以 。要进行约分。
通分是把两个分数分母化在相同的。
约分是把分数和分子和分母约得最简。
🍋解题代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int t=in.nextInt();
for(int i=0;i<t;i++) {
int a=in.nextInt();
int b=in.nextInt();
int c=in.nextInt();
int d=in.nextInt();
int x=b*d-a*(d+c);
x=Math.abs(x);
int y=2*b*d;
if(x==0||y==0)
System.out.println(0);
else {
int g=gcd(x,y);
System.out.println(x/g+"/"+y/g);
}
}
}
static int gcd(int a,int b) {
if(b==0)
return a;
return gcd(b,a%b);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();
int t=(int)in.nval;
for(int i=0;i<t;i++) {
in.nextToken();
int a=(int)in.nval;
in.nextToken();
int b=(int)in.nval;
in.nextToken();
int c=(int)in.nval;
in.nextToken();
int d=(int)in.nval;
int x=b*d-a*(d+c);
x=Math.abs(x);
int y=2*b*d;
if(x==0||y==0) {
pw.println(0);
pw.flush();
}
else {
int g=gcd(x,y);
pw.println(x/g+"/"+y/g);
pw.flush();
}
}
}
static int gcd(int a,int b) {
if(b==0)
return a;
return gcd(b,a%b);
}
}