POJ 3923 Ugly Windows(——考察思維縝密性的模擬題)
阿新 • • 發佈:2017-10-03
題意 stdio.h i++ lis stop 字母 include ide 輸入
題目鏈接:
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
POJ 3923 Ugly Windows(——考察思維縝密性的模擬題)