NBUT 1665
2016-03-06 15:34
183 查看
好奇的skyv95想要做一个正方形的木块,现在有三种颜色的矩形木块,颜色分别为"A","B","C"。他现在很想把三个木块拼接成一个大正方形,现在求助于你们,问分别给你们三种颜色矩形的两个边长,判断是否能组成一个正方形。
Input
依次输入颜色为A的矩形的两边长度,颜色为B的矩形的两边长度,颜色为C的矩形的两边长度。
Output
可以输出"YES",否则输出"NO"。
Sample Input
4 4 2 6 4 2
Sample Output
YES
Hint
例子的图像可以是这样 6 BBBBBB BBBBBB AAAACC AAAACC AAAACC AAAACC
主要分两种情况,看似比较简单的数学题,但做起来比较麻烦,
分两种情况,第一种三个矩形的长都等于拼成正方形的边,这一种比较简单,第二种比较复杂,只有一个矩形的长或宽等于正方形的边长,主要在于另外两个矩形的长或宽加这个矩形的长和宽 一定等于正方形的边长
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int a[10],ans,i,j,k,l; int main() { while(scanf("%d",&a[0])!=EOF) { int help=0; l=0; ans=0; for(i=1;i<6;i++) scanf("%d",&a[i]); for(i=0;i<3;i++) ans+=a[i*2]*a[2*i+1]; k=sqrt(ans);//先求出边长 if(k*k!=ans) { printf("NO\n"); continue; } for(i=0;i<6;i++) { if(a[i]>k) help=1;//如果有一条边的长度大于边长,那么肯定不行 l=max(a[i],l);//找到最长的边 } if(l!=k)//如果最长的边大于了边长,这一句可以不写 help=1; j=0;//找到 长度等于边长的边的个数 for(i=0;i<6;i++) if(a[i]==l) j++; if(j==2)//如果 长度为边长的边的个数为2 那么肯定不行 help=1; if(j==3)//如果有3 个 为情况1 ,因为原来已经算过正方形的面积,所以此时一定满足 { printf("YES\n"); continue; } if(help==1) { printf("NO\n"); continue; } int cnt; if(j==1)//如果有1 个 为情况2 { for(i=0;i<6;i++) if(a[i]==l) cnt=i; } int nmd; int flag=0; if(cnt%2==0) //这个是确定 等于边长的那条边的第几个矩形的长还是宽 //如果是长 nmd=cnt+1; //如果是宽 if(cnt%2==1) nmd=cnt-1; for(i=0;i<3;i++) { if(i*2==cnt||i*2+1==cnt)//判断另外两个矩形的长或宽加这个矩形那个不等于边长的边 是否为正方形的边 continue; if(a[i*2]+a[nmd]==l) flag=1; if(a[i*2+1]+a[nmd]==l) flag=1; } if(flag==1) { printf("YES\n"); continue; } } }
相关文章推荐
- 构建之法阅读笔记01--泛读《构建之法》提出的问题
- 构建之法阅读笔记01
- 20道简单加减法随机生成程序
- QT5 应用1
- 文档目录与宏
- Android开发60条技术经验总结
- LeetCode--160. Intersection of Two Linked Lists
- Java编程学习小技巧
- 基于 ODR 和 BSMOTE 的不均衡 SVM 分类算法
- POJO和EJB的区别
- 集群源码安装ONOS
- [国嵌攻略][110][驱动开发概述]
- Spring4.0学习笔记--IOC
- java 类加载后不一定会对类进行初始化
- 学习进度条——第一周
- javaEE服务端与mysql编程总结
- java利用Ant脚本生成war包全过程
- swiper H5 滑屏插件推荐
- OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例)
- STL---按行读取数字串,并分割转为数字