洛谷入门-P1888
三角函数
题目描述
输入一组勾股数 \(a,b,c(a\neq b\neq c)\),用分数格式输出其较小锐角的正弦值。(要求约分。)
输入格式
一行,包含三个正整数,即勾股数 \(a,b,c\)(无大小顺序)。
输出格式
一行,包含一个分数,即较小锐角的正弦值
样例 #1
样例输入 #1
3 5 4
样例输出 #1
3/5
提示
数据保证:\(a,b,c\) 为正整数且 \(\in [1,10^9]\)。
我的思路
首先选出a, b, c 中的max , min
考虑到算法时空的占用,用简单的条件语句最好
要最简分数就要用到最大公因数的公式(欧拉公式-辗转相除法-gcd)
我的代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt(), b = in.nextInt(), c = in.nextInt();
/*
* How to use the shortest code to find min and max in tree elements
*
*/
// int arr[] = { a, b, c }; // 1
// for (int i = 0; i < arr.length; i++) {
// for (int j = 1; j < arr.length; j++) {
// if (arr[j - 1] < arr[j]) {
// int t = arr[j - 1];
// arr[j - 1] = arr[j];
// arr[j] = t;
// }
// }
// }
// a = arr[0];
// b = arr[1];
// c = arr[2];
// System.out.println(c / gcd(a, c) + "/" + a / gcd(a, c));
int max = a, min = a; // the select short mini // 2
if (max < b)
max = b;
if (max < c)
max = c;
if (min > b)
min = b;
if (min > c)
min = c;
System.out.println(min / gcd(max, min) + "/" + max / gcd(max, min));
in.close();
}
static int gcd(int a, int b) { // 3
return b == 0 ? a : gcd(b, a % b);
}
}
关键:
简单找max, min
知道gcd