6-9 天平 uva839

时间:2021-07-14 17:11:50

这题十分巧妙!!代码精简!强大的递归!!!

边读边判断   先读到底部  慢慢往上判断   难点在于传递w1+w2

有一个比LRJ更加简便的方法  return传递  全局变量判断

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath> using namespace std;
int flag; int dfs()
{
int d1,w1,d2,w2;cin>>w1>>d1>>w2>>d2;
if(!w1)w1=dfs();
if(!w2)w2=dfs();
if(w1*d1!=w2*d2)flag=; return w1+w2; } int main()
{
int n;cin>>n;
while(n--)
{
flag=;
dfs();
if(flag)printf("YES\n");else printf("NO\n");
if(n)printf("\n");
} return ;
}

LRJ是return判断   引用来传递!  都很巧妙

LRJ的方法:

#include<bits/stdc++.h>
using namespace std; bool judge(int &w)
{
bool b1=true ,b2=true;
int w1,d1,w2,d2;
cin>>w1>>d1>>w2>>d2;
if(!w1) b1=judge(w1);
if(!w2) b2=judge(w2);
w=w1+w2;
return b1&&b2&&(w1*d1==w2*d2);
} int main()
{ int cas;cin>>cas;
while(cas--)
{ int w=; if(judge(w))printf("YES\n");
else printf("NO\n"); if(cas) cout<<endl; } return ;
}