题目链接:

http://poj.org/problem?id=3923

题意描述:

输入一个n*m的屏幕

该屏幕内有至少一个对话框(每个对话框都有对应的字母表示)

判断并输出该屏幕内处于最表层的对话框是哪些(有多个的话按字典序)

解题思路:

很接近生活的一道模拟题,考察了思维的缜密性,尤其是出现嵌套情况时,应该输出里层的对话框编号即可。

AC代码:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
char map[110][110];
int istop(int sx,int sy,char x);        //判断是否为表层对话框函数
int main()
{int n,m,i,j,list[26],k,c;while(scanf("%d%d",&n,&m),n+m != 0){memset(list,0,sizeof(list));for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf(" %c",&map[i][j]);if(isalpha(map[i][j]))list[map[i][j]-'A']=1;//标记有哪些字母标号的对话框出现
            }}for(i=0;i<26;i++){if(list[i]){for(j=1;j<=n;j++){int flag=0;for(k=1;k<=m;k++){if(map[j][k]-'A'==i){list[i]=istop(j,k,map[j][k]);flag=1;break;}}if(flag)break;}}}for(i=0;i<26;i++){if(list[i])printf("%c",'A'+i);}printf("\n");        }return 0;
}
int istop(int sx,int sy,char x)
{int i,j,r,c;i=sx;j=sy+1;while(map[i][j] == x)j++;j--;c=j;//记录该对话框的列数 if(map[i+1][j] != x)return 0;while(map[i][j] == x)i++;    i--;r=i;//记录该对话框的行数 if(map[i][j-1]!=x)return 0;while(map[i][j] == x)j--;    j++;if(map[i-1][j]!=x)return 0;while(map[i][j] == x)i--;    i++;if(i!=sx &&j!=sy)return 0;for(i=sx+1;i<r;i++)//判断该对话框内是否有嵌套对话框 for(j=sy+1;j<c;j++)if(map[i][j]!='.')return 0;return 1;
}

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<ctype.h>
 4 char map[110][110];
 5 int istop(int sx,int sy,char x);
 6 int main()
 7 {
 8     int n,m,i,j,list[26],k,c;
 9     while(scanf("%d%d",&n,&m),n+m != 0)
10     {
11         memset(list,0,sizeof(list));
12         for(i=1;i<=n;i++)
13         {
14             for(j=1;j<=m;j++)
15             {
16                 scanf(" %c",&map[i][j]);
17                 if(isalpha(map[i][j]))
18                 list[map[i][j]-'A']=1;
19             }
20         }
21         for(i=0;i<26;i++)
22         {
23             if(list[i])
24             {
25                 for(j=1;j<=n;j++)
26                 {
27                     int flag=0;
28                     for(k=1;k<=m;k++)
29                     {
30                         if(map[j][k]-'A'==i)
31                         {
32                             list[i]=istop(j,k,map[j][k]);
33                             flag=1;
34                             break;
35                         }
36                     }
37                     if(flag)
38                     break;
39                 }
40             }
41         }
42         for(i=0;i<26;i++)
43         {
44             if(list[i])
45                 printf("%c",'A'+i);
46         }
47         printf("\n");
48     }
49     return 0;
50 }
51 int istop(int sx,int sy,char x)
52 {
53     int i,j,r,c;
54     i=sx;
55     j=sy+1;
56     while(map[i][j] == x)
57     j++;
58     j--;
59     c=j;
60     if(map[i+1][j] != x)
61     return 0;
62
63     while(map[i][j] == x)
64     i++;
65     i--;
66     r=i;
67     if(map[i][j-1]!=x)
68     return 0;
69
70     while(map[i][j] == x)
71     j--;
72     j++;
73     if(map[i-1][j]!=x)
74     return 0;
75
76     while(map[i][j] == x)
77     i--;
78     i++;
79     if(i!=sx &&j!=sy)
80     return 0;
81
82     for(i=sx+1;i<r;i++)
83         for(j=sy+1;j<c;j++)
84             if(map[i][j]!='.')
85             return 0;
86     

转载于:https://www.cnblogs.com/wenzhixin/p/7622848.html

POJ 3923 Ugly Windows(——考察思维缜密性的模拟题)相关推荐

  1. 程序设计思维与实践月模拟题X3

    这里写目录标题 201604-3 路径解析 题目 思路 代码 201609-3 炉石传说 题目 思路 代码 201809-3 元素选择器 题目 思路 代码 201604-3 路径解析 题目 在操作系统 ...

  2. 程序设计思维与实践 月模拟题3 Blog

    CSP-201609-3炉石传说 题目具体描述不再粘贴,如有需要可参照CSP模拟考试网址. CSP模拟考试网址 题目分析 首先构建结构体role用来保存英雄/随从,包含生命值和攻击力两个变量,这样两名 ...

  3. 动态获取某个元素的高度_codeforces 1443D,解法简单,思维缜密的动态规划问题...

    大家好,欢迎来到codeforces专题. 今天选择的问题是1443场次的D题,这题是全场倒数第三题,截止到现在一共通过了2800余人.这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因 ...

  4. 为什么有的人思维缜密,滴水不漏,逻辑通透?

    要做到思维缜密,逻辑严谨,可以学习使用"MECE法则"! MECE法则,是麦肯锡公司的巴巴拉·明托(Barbara Minto)在<金字塔原理>(The Minto P ...

  5. 如何成长为一名思维缜密的产品经理

    转自 http://buluo.qq.com/p/detail.html?bid=257529&pid=6899262-1445322100 毋庸置疑,产品新人和产品老鸟之间普遍有着很大的差距 ...

  6. 山东大学程序设计思维与实践 四月模拟:TT与可怜的猫

    4月模拟-TT与可怜的猫 程序设计思维实践-复杂模拟题训练2 山东大学计算机科学与技术学院程序设计思维与实践 sdu程序设计思维与实践 山东大学程序设计思维实践作业 山大程序设计思维实践 山东大学程序 ...

  7. POJ 3030 Nasty Hacks (模拟题)

    题目:http://poj.org/problem?id=3030 思路:模拟题 #include <iostream>using namespace std;int main() {in ...

  8. java语言与www技术形成性考核册_电大Java语言与WWW技术形成性考核程序题

    电大JAVA语言与WWW技术形成性考核程序题一.写出下列程序完成的功能1.PUBLICCLASSSUM{PUBLICSTATICVOIDMAINSTRINGARGS{INTSUM0FORINTI1IM ...

  9. bigdecimal比较大小的方法_【初中数学思维训练】第7题——比较大小的常用方法...

    1 前言 老朋友可以略去前言,直奔第2部分--正文部分 本专题以新课程标准的初中数学知识为网络,以初中数学题的一题多解为主线,以解题后的反思为枢纽,试图全面系统地培养.训练中学生的发散思维能力.综合解 ...

最新文章

  1. 如何完全安装mysql数据库_数据库经验:如何简单安装MySQL数据库
  2. iOS5.1 + XCode4.5 device debug,the screen will ...
  3. View 4桌面虚拟化炙手可热 但未熟透
  4. iOS - 数据的归档和反归档
  5. centos7离线安装tengine所需依赖
  6. 协方差、相关系数---通俗解释
  7. FMDB/SQLCipher数据库管理
  8. http --- 公开密钥加密(非对称加密)的几个概念
  9. 解决linux下QtCreator无法输入中文的情况
  10. java四个基本步骤_javac编译的四个主要的流程
  11. 渐变色彩艺术海报背景素材|感官刺激、个性突出
  12. SQLServer:执行计划
  13. Android Studio的TableLayout的使用(自定义列拉伸,收缩,隐藏,横跨列)
  14. 无线通信与生活-(1)
  15. 手机内存卡大小的计算
  16. MTK Combo Chip常用调试命令
  17. k8s 部署 owncloud
  18. php利用PDO对数据库的操作练习
  19. Element表格之表头合并、行合并和列合并
  20. 计算机组成原理:简单页表和多级页表(虚拟内存的映射)

热门文章

  1. 锁定10月10日,九州云Animbus7.0与你不见不散
  2. 手机短视频怎么去水印 百家号视频消重技术
  3. java实现宠物主人登录_JavaOO综合练习题目 -- 宠物管理系统
  4. 学习笔记Day01——Linux基础1——简介及网络基础
  5. 从江苏到广东到湖北,ET工业大脑正在改变着中国工业制造业
  6. Learning from Imbalanced Data 翻译和阅读笔记
  7. 【新书推荐】【2021】超大规模集成电路、通信和信号处理进展:VCAS 2019精选会议录
  8. 国行三星Note3已开始推送安卓4.4.2更新
  9. opencv--python(一)图像和视频处理之读取,显示和保存
  10. 分布式事务(三)、柔性事务之 TCC、Saga、本地消息表、事务消息、最大努力通知