1. 程式人生 > 其它 >最簡真分數(北大複試上機)

最簡真分數(北大複試上機)

技術標籤:王道複試指南c++

前言:

21考研,不論能否進複試記錄一下準備路上寫下的垃圾程式碼。本來啃《演算法筆記》,但是感覺太多了做不完,改做王道機試指南。

題目描述:

給出n個正整數,任取兩個數分別作為分子和分母組成最簡真分數,程式設計求共有幾個這樣的組合。

輸入描述

每組包含n(n<=600)和n個不同的整數,整數大於1且小於等於1000。

輸出描述:

每行輸出最簡真分數組合的個數。

解答

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool nofactor
(int a, int b) { //最大公倍數為1則為最簡分數 int res = 0; while (a != 0 && b != 0) { if (a > b) a = a % b; else b = b % a; } if (a == 0 && b != 0) res = b; else res = a; if (res != 1) return false; else return true; } int main() { int n; while (cin >> n) { int count =
0; int temp; vector<int> vi; for (int i = 0; i < n; i++) { cin >> temp; vi.push_back(temp); } sort(vi.begin(),vi.end()); //排序以保證真分數這一條件 for (int i = vi.size() - 1; i >= 0; i--) for (int j = i; j >= 0; j--) if (nofactor(vi[i], vi[j])) count++; cout <<
count << endl; } return 0; }