演算法學習之路|最簡分數
一個分數一般寫成兩個整數相除的形式:N/M,其中M不為0。最簡分數是指分子和分母沒有公約數的分數表示形式。
現給定兩個不相等的正分數 N1/M1 和 N2/M2,要求你按從小到大的順序列出它們之間分母為K的最簡分數。
輸入格式:
輸入在一行中按N/M的格式給出兩個正分數,隨後是一個正整數分母K,其間以空格分隔。題目保證給出的所有整數都不超過1000。
輸出格式:
在一行中按N/M的格式列出兩個給定分數之間分母為K的所有最簡分數,按從小到大的順序,其間以1個空格分隔。行首尾不得有多餘空格。題目保證至少有1個輸出。
輸入樣例:
7/18 13/20 12
輸出樣例:
5/12 7/12
我的思路:
分子分母找出最大公因數。
然後各自/=最大公因數,重複上述,
直到最大公因數為1即可。
詳情見程式碼:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
int a;
int b;
};
int fun(int a,int b){
a=max(a,b);
b=min(a,b);
int r=1;
while(r!=0){
r=a%b;
a=b;
b=r;
}
return a;
}
int main(){
double low,high;
int a,b;
scanf("%d/%d",&a,&b);
low=a*1.0/b;
scanf("%d/%d",&a,&b);
high=a*1.0/b;
high=max(low,high);
low=min(low,high);
int k;
cin>>k;
vector<struct node> v;
for(int i=1;i<k;i++){
if(fun(k, i)!=1)
continue;
if(i*1.0/k<=high&&i*1.0/k>=low){
struct node tmp;
tmp.a=i;
tmp.b=k;
v.push_back(tmp);
}
}
for(int i=0;i<v.size()-1;i++){
cout<<v[i].a<<"/"<<v[i].b<<" ";
}
cout<<v[v.size()-1].a<<"/"<<v[v.size()-1].b;
}
相關文章
- 演算法學習之路|朋友數演算法
- 演算法學習之路|數零壹演算法
- 演算法學習之路|科學計數法演算法
- 演算法學習之路|愛丁頓數演算法
- 演算法學習之路|差分約束系統演算法
- 演算法學習之路|連結串列元素分類演算法
- 演算法學習之路|個位數統計演算法
- 演算法學習之路|寫出這個數(20)演算法
- 1062 最簡分數
- 演算法學習之路|划拳演算法
- 演算法學習之路|有向無環圖(DAG)求最長路演算法
- 分數化簡演算法演算法
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法
- 演算法學習之路|方格分割演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|列印沙漏演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|結繩演算法
- 演算法學習之路|開學寄語演算法
- 演算法學習筆記(21):數論分塊演算法筆記
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- 演算法學習之路|POJ-2479最大子串和(簡單dp)演算法
- Python學習之路13-記分Python
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法