题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2487
注意中间不允许出现别的字母
还有长宽必须都>=3
#include<bits/stdc++.h> using namespace std; char mp[110][110]; int main() { int i,k,j,n,m; while(scanf("%d%d",&n,&m),n||m) { getchar(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%c",&mp[i][j]); } getchar(); } string si=""; for(k=0;k<26;k++) { int gs=0;//判断高是否>=3 int f=1,x=0;//x判断是否出现过 int m1=0,m2=0,ff=0;//m1 上边长 m2下边长,判断是否相等 for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(mp[i][j]-'A'==k) { gs++; int sum=1; x=1; for(int o=j+1;o<=m;o++) { if(mp[i][o]-'A'==k)sum++; if(sum<2&&(mp[i][o]-'A')!=k&&mp[i][o]!='.')f=0;//判断中间是否出现过别的字母,不允许出现 } if(sum>2&&ff==0)m1=sum,ff=1; else if(sum>2&&ff==1)m2=sum;//判断上下边长 if(m1!=m2&&m1<2&&m2<2)f=0; break; } } } if(f==1&&x==1&&gs>=3)si+=('A'+k); } cout<<si<<endl; } return 0; }