习题3-10 盒子 UVa1587
2016-07-31 13:32
381 查看
算法竞赛入门经典(第2版)第3章 数组和字符串
习题3-10 盒子 UVa1587
感悟。
1、上网站下载英文原题,仔细阅读。
2、思路清晰流畅,设置结构体,第一个数据是较小的边,第二个数据是较大的边。
3、根据结构体中对应两条边相等,找出3个不同的面。
4、将3个面里的边由小到大排序。
5、每个面对应边的关系et[0].a==et[1].a&&et[0].b==et[2].a&&et[1].b==et[2].b。
6、提交AC,好长时间没有提交一次就AC了。
7、思路虽然清晰,但编码过程中,还是存在笔误,所以写好一段代码,就跟踪一段,是十分有必要的。
附上代码
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
struct edge{
int a;
int b;
}e[6],et[3],ee;
int book[6];
int main(){
int i,j;
int a,b,t;
int eflag; //退出标识
int count;
while(1){
eflag=0;
memset(book,0,sizeof(book));
for(i=0;i<6;i++){
if(scanf("%d%d",&a,&b)==EOF){//解决了退出机制,开始还在考虑怎么退出,现今解决了
eflag=1;
break;
}
if(a>b){//自小到大储存边长
t=a;
a=b;
b=t;
}
e[i].a=a;
e[i].b=b;
}
if(eflag)//eflag=1退出
break;
count=0;
for(i=0;i<6;i++){
for(j=0;j<6;j++){
if(i!=j&&book[i]==0&&book[j]==0&&e[i].a==e[j].a&&e[i].b==e[j].b){//寻找相同的两个面,共有3对
book[i]=1;
book[j]=1;
et[count]=e[i];
count++;
}
}
}
if(count==3){
for(i=0;i<count;i++){
for(j=i+1;j<count;j++){
if(et[i].a>=et[j].a&&et[i].b>=et[j].b){
ee=et[i];
et[i]=et[j];
et[j]=ee;
}
}
}
if(et[0].a==et[1].a&&et[0].b==et[2].a&&et[1].b==et[2].b){//a,b,c三条边
printf("POSSIBLE\n");
}else
printf("IMPOSSIBLE\n");
}else
printf("IMPOSSIBLE\n");
}
return 0;
}
习题3-10 盒子 UVa1587
感悟。
1、上网站下载英文原题,仔细阅读。
2、思路清晰流畅,设置结构体,第一个数据是较小的边,第二个数据是较大的边。
3、根据结构体中对应两条边相等,找出3个不同的面。
4、将3个面里的边由小到大排序。
5、每个面对应边的关系et[0].a==et[1].a&&et[0].b==et[2].a&&et[1].b==et[2].b。
6、提交AC,好长时间没有提交一次就AC了。
7、思路虽然清晰,但编码过程中,还是存在笔误,所以写好一段代码,就跟踪一段,是十分有必要的。
附上代码
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
struct edge{
int a;
int b;
}e[6],et[3],ee;
int book[6];
int main(){
int i,j;
int a,b,t;
int eflag; //退出标识
int count;
while(1){
eflag=0;
memset(book,0,sizeof(book));
for(i=0;i<6;i++){
if(scanf("%d%d",&a,&b)==EOF){//解决了退出机制,开始还在考虑怎么退出,现今解决了
eflag=1;
break;
}
if(a>b){//自小到大储存边长
t=a;
a=b;
b=t;
}
e[i].a=a;
e[i].b=b;
}
if(eflag)//eflag=1退出
break;
count=0;
for(i=0;i<6;i++){
for(j=0;j<6;j++){
if(i!=j&&book[i]==0&&book[j]==0&&e[i].a==e[j].a&&e[i].b==e[j].b){//寻找相同的两个面,共有3对
book[i]=1;
book[j]=1;
et[count]=e[i];
count++;
}
}
}
if(count==3){
for(i=0;i<count;i++){
for(j=i+1;j<count;j++){
if(et[i].a>=et[j].a&&et[i].b>=et[j].b){
ee=et[i];
et[i]=et[j];
et[j]=ee;
}
}
}
if(et[0].a==et[1].a&&et[0].b==et[2].a&&et[1].b==et[2].b){//a,b,c三条边
printf("POSSIBLE\n");
}else
printf("IMPOSSIBLE\n");
}else
printf("IMPOSSIBLE\n");
}
return 0;
}
相关文章推荐
- 算典03_习题_10_UVA-1587
- 【习题 3-10 UVA - 1587】Box
- ???习题3-10 UVa1587 Box
- Uva11214 Guarding the Chessboard【dfs回溯】【习题7-10】
- 习题10-5 不同素数之和 uva 1213
- 习题10-6 UVA - 1210 Sum of Consecutive Prime Numbers 连续素数之和(滑动窗口)
- 习题10-1 砌砖 UVa11040
- 习题10-4 UVA 1644 Prime Gap(素数打表+二分查找)
- 盒子(uva-1587)
- 《算法竞赛入门经典2ndEdition 》习题3-10 盒子(Box, Uva1587)
- 算法竞赛入门经典 第二版 习题4-10 洪水 Flooded uva815
- 习题10-15 零和一 UVa12063
- 习题10-9 约数 UVa294
- 习题8-10 奇怪的股市 UVa1614
- 紫书搜索 习题7-10 UVA - 11214 Guarding the Chessboard 迭代加深搜索
- 习题10-2 勤劳的蜜蜂 UVa808
- 算法竞赛入门经典(第2版)习题4-10 洪水!UVa815
- 习题 10-23 UVA - 10479 The Hendrie Sequence
- 算法竞赛入门经典第三章3-10 Box UVA - 1587
- 3-10 uva 1587 box