1. 程式人生 > >Not so Mobile UVA - 839

Not so Mobile UVA - 839

因此 ios https 距離 http 編寫 樹狀 span pan

題目鏈接:https://vjudge.net/problem/UVA-839

技術分享圖片

技術分享圖片

題目大意:輸入一個樹狀天平,根據力矩相等原則,判斷是否平衡。 如上圖所示,所謂力矩相等,就是Wl*Dl=Wr*Dr。 其中Wl和Wr分別為左右兩邊砝碼的重量,D為距離

采用遞歸的方式輸入:每個天平的格式為Wl,Dl,Wr,Dr 當Wl或Wr為0時 表示該"砝碼" 實際是一個子天平 接下來會描述這個子天平。當Wl=Wr=0 會先描述左子天平 然後是右子天平。

思路:解決本道題之前一定要先弄請吃題目意思,建議讀者把樣例輸入畫出來。。。

這道題的輸入就采用了遞歸的方式定義,因此編寫一個遞歸過程進行輸入比較。 事實上 在輸入過程就可以完成判斷, 由於使用引用傳值 代碼非常精簡。 本題極為重要 一定要搞懂!!!

其實很容易想到的,子天平的重量要由它下面的砝碼傳遞上來,使用引用傳遞真的很方便,通過這題,也算開闊了自己對引用的視野 以前從來沒有使用過引用,這也算第一道引用的題了

看代碼:

#include<iostream>
using namespace std;
bool solve(int& W)
{
    int W1,D1,W2,D2;
    bool b1=true,b2=true;
    cin>>W1>>D1>>W2>>D2;
    if(!W1) b1=solve(W1);
    if(!W2) b2=solve(W2);
    W
=W1+W2; return b1&&b2&&(W1*D1==W2*D2);//天平兩端是否相等 } int main() { int T,W; cin>>T; while(T--) { if(solve(W)) cout<<"YES"<<endl; else cout<<"NO"<<endl; if(T) cout<<endl; } return 0; }

Not so Mobile UVA - 839