博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归输入与引用传值(UVa839 Not so Mobile)
阅读量:5884 次
发布时间:2019-06-19

本文共 855 字,大约阅读时间需要 2 分钟。

题目的大意是一个树形天平,输入给出样例的个数,然后空一行,每行4个数W1,D1,W2,D2,分别代表天平左侧的重量、力臂和天平右侧的重量、力臂。如果W1或者W2为0,则代表该节点有左子树或右子树,如果W1,W2同时为0,则下一行先给出左子树,再下一行给出右子树,判断输入的天平是否平衡。

仔细分析,可以发现输入的方式是递归的,因为输入的数据其实是先序遍历一棵树的结果。这样我们就可以将输入修改成递归的,根据输入的数据,进行树的递归遍历。

这里我们注意到节点的重量为0,因此我们需要将节点的重量值加上它子树的重量,才能在节点这一层进行判断,所以用引用传值。

另外,比较复杂的输入格式我们可以直接用C++的cin来简化,同时注意中间有空行的小技巧,最后一个输出后不能有空行。

话不多说,代码如下:

1 #include
2 using namespace std; 3 bool solve(int &w){ //如果平衡,返回true 4 bool sub1=true,sub2=true; 5 int w1,d1,w2,d2; 6 cin>>w1>>d1>>w2>>d2; 7 if(!w1)sub1=solve(w1);//让后续的子树的重量累计到分支节点上 8 if(!w2)sub2=solve(w2); 9 w=w1+w2; //累计到分支节点上 10 return sub1 && sub2 && (w1*d1 == w2*d2);11 } 12 int main(){13 int t,w;14 cin>>t;15 while(t--){16 solve(w)?cout<<"YES\n":cout<<"NO\n";17 if(t)cout<

转载于:https://www.cnblogs.com/luruiyuan/p/5843742.html

你可能感兴趣的文章
在 ASP.NET MVC 中使用异步控制器
查看>>
SQL语句的执行过程
查看>>
详解Linux中Load average负载
查看>>
HTTP 协议 Cache-Control 头——性能啊~~~
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
Android中EditText,Button等控件的设置
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
软链接和硬链接详解
查看>>
Redis_master-slave模式
查看>>
彻底卸载删除微软Win10易升方法
查看>>
SWT/JFACE之环境配置(一)
查看>>