洛谷:三角函数,C语言
題目描述
?????輸入一組勾股數 a,b,c(abc),用分數格式輸出其較小銳角的正弦值。(要求約分。)
輸入格式
一行,包含三個正整數,即勾股數 a,b,c(無大小順序)。
輸出格式
一行,包含一個分數,即較小銳角的正弦值
輸入輸出樣例
輸入 #1
3 5 4輸出 #1
3/5說明/提示
數據保證:a,b,c 為正整數且 ∈[1,]。
思路:
1.要求輸出較小銳角的 正弦: 最小的直角邊/斜邊,要進行排序.
在這里我用了冒泡排序和最笨的方法(一個一個比較)排序
2.要求約分:
約分可以有 輾轉相除法,和 基礎算法
代碼:
法一:輾轉相除法 + 冒泡排序
#include<stdio.h> int gcd(int m,int n) {int t;while(n != 0){ t = m % n;m = n;n = t; }return m; }int main() {int a[3],i,j,tmp;scanf("%d%d%d",&a[0],&a[1],&a[2]);for(i = 0;i < 2;i ++)for(j = 0; j < 2 - i;j ++)if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;}printf("%d/%d",a[0]/gcd(a[0],a[2]),a[2]/gcd(a[0],a[2]));return 0; }法二:基礎算法
#include<stdio.h>void yuefen(int m,int n) {int i = 0;do{i ++;if(m % i == 0 && n % i == 0){m = m / i;n = n / i;i = 1;} }while(i < n);printf("%d/%d",m,n); }int main() {int a, b, c;scanf("%d%d%d",&a,&b,&c);if(a > b)if(a > c)if(b > c)yuefen(c,a);elseyuefen(b,a);else yuefen(b,c);else if( b < c)yuefen(a,c);else if(a < c)yuefen(a,b);elseyuefen(c,b);return 0; }收獲:
學會了輾轉相除法:
輾轉相除法的原理_Ran-CSDN博客_輾轉相除法的原理輾轉相除法是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的余數(第一余數)去除除數,再用出現的余數(第二余數)去除第一余數,如此反復,直到最后余數是0為止。如果是求兩個數的最大公約數,那么最后的除數就是這兩個數的最大公約數。這個和更相減損術有著異曲同工之處。原理:首先介紹下更相減損術的原理,假設有兩個數161和63,我們要求這兩個數的最大公因數,不妨假定這個最大公因數為m...https://blog.csdn.net/weixin_43886797/article/details/85569998和約分的算法:
C語言約分-化為最簡分數_Cassiel的博客-CSDN博客_c語言約分C語言中約分成最簡分數文章目錄==C語言中約分成最簡分數==基礎算法輾轉相除法(歐幾里德算法)基礎算法#include<stdio.h>int main(){ int a, b; int i=0; scanf("%d/%d", &a, &b);do { i++; if(a%i==0&&b%i==0) { a=a/i; b=b/https://blog.csdn.net/weixin_46404263/article/details/107365650
總結
以上是生活随笔為你收集整理的洛谷:三角函数,C语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7c盘空间越来越小_win7系统C
- 下一篇: 使用gitee部署静态网页