NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組決賽
 NPSC 2004國決 B 化學元素組成

作者 主題: NPSC 2004國決 B 化學元素組成  (閱讀 539 次)

rscpp

  • 中級會員
  • ***
  • 文章數: 60
    • 檢視個人資料
NPSC 2004國決 B 化學元素組成
« 於: 五月 07, 2015, 09:33:52 pm »

代碼: [選擇]
// npsc04-j2b (2004國中決 題目 B 化學元素組成)
// 題目說每組有4個整數 1<= wi1 , wi2 , pi1 , pi2 <=100 ,沒說 wi1會不會等於wi2,若相等應只有一組 w1輸出
// 我們先處理使wi1<wi2, 輸出的w1(wi1+wi1):w2(wi1+wi2):w3(wi2+wi2),題目說w1<=w2<=...<=w? 又說互異,應該是若相等的需合成一個?
// 因wi1,wi2只有兩個,wi1 != wi2則有三種不同w1(wi1+wi1):w2(wi1+wi2):w3(wi2+wi2),若wi1 == wi2 則只有一種w1(wi1+wi2) p為1
// wi1 != wi2 的三種 p 值(p1=pi1xpi1 , p2=2xpi1xpi2 , p3=pi2xpi2) 註:pi1,pi2也隨wi1,wi2的大小調整哦,最後p1,p2,p3求gcd化簡
#include <iostream>
#include <cstring>
using namespace std;
int gcd(int a, int b)
{
int r;
while( r=a%b )
{
a=b;
b=r;
}
return b;
}
int main()
{
  int t,i,j,n,cas;
  int wi1,wi2,pi1,pi2;
cin >> n;
for(cas=1; cas<=n; ++cas)
{
cin >> wi1 >> wi2 >> pi1 >> pi2;
if(wi1==wi2)
{
cout << "Case " << cas <<"-> " << wi1+wi2 << " = 1\n";
continue;
}
if(wi1>wi2)
{
t=wi1; wi1=wi2; wi2=t;
t=pi1; pi1=pi2; pi2=t;
}
int p1=pi1*pi1 , p2=2*pi1*pi2 , p3=pi2*pi2;
int g=gcd(p1, gcd(p2,p3));
cout << "Case " << cas <<"-> "
<< wi1+wi1 << " : "  << wi1+wi2 << " : " << wi2+wi2 << " = "
<< p1/g << " : "  << p2/g << " : " << p3/g << endl;
}
  return 0;
}
/*
範例輸入:

4
1 2 1 1
16 17 2 2
37 35 1 3
50 50 2 5
範例輸出:

Case 1-> 2 : 3 : 4 = 1 : 2 : 1
Case 2-> 32 : 33 : 34 = 1 : 2 : 1
Case 3-> 70 : 72 : 74 = 9 : 6 : 1
Case 4-> 100 = 1
*/
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2004國中組決賽
 NPSC 2004國決 B 化學元素組成