#include <stdio.h>
int n;
char fangzhen[100][100];
int zimu[10][2]={0,0};//原来数组中有0个元素(~[0][0])个
int xiangtong(int i, int j, int k,char c){//看看这个区间的字母是否相同~
int t=1;
while(j<=k){
if(fangzhen[i][j] != c)
t=0;
j++;
}
return t;
}
void tianjia(char c){//添加字母集合
int i=0,m=1;
while(zimu[i][0]){
if(zimu[i][0]==c){
m=0;
break;
}
i++;
}
if(m)
zimu[i][0]=c;
}
void zimujilu(char c, int t){//三角形字母数
int i=0;
while(zimu[i][0]){
if(zimu[i][0]==c){
zimu[i][1]+=t;
break;
}
i++;
}
}
void paixu(){
int i,j,m,n;
i=0;
while(zimu[i][0]){
j=i+1;
while(zimu[j][0]){
if(zimu[i][0]>zimu[j][0]){
m=zimu[i][0];zimu[i][0]=zimu[j][0];zimu[j][0]=m;
n=zimu[i][1];zimu[i][1]=zimu[j][1];zimu[j][1]=n;
}
j++;
}
i++;
}
}
int panduan(int i, int j, int k, char c, int a){//行数、左开头、右结尾、字母、标记~
int temp=0;
if(j<=k && xiangtong(i, j, k, c)){
if(j==k)
return 1;
else{
if(fangzhen[i-1][j]==c && (a==0 || a==1)){//左上型|\,
int t=1;
temp+=panduan(i-1, j, k-1, c, t);
}
if(fangzhen[i+1][j]==c && (a==0 || a==2)){//左下型|/,
int t=2;
temp+=panduan(i+1, j, k-1, c, t);
}
if(fangzhen[i-1][k]==c && (a==0 || a==3)){//右上型/|,
int t=3;
temp+=panduan(i-1, j+1, k, c, t);
}
if(fangzhen[i+1][k]==c && (a==0 || a==4)){//右下型\|.
int t=4;
temp+=panduan(i+1, j+1, k, c, t);
}
}
} printf("\n");
return temp;
}
void main()
{
int i,j,k,t=0,s;
printf("请输入你的字母方阵的长或宽:\n");
scanf("%d",&n);
printf("请输入你的字母方阵:\n");
for(i=0;i<n;i++)
{
for(j=0;j<=n;j++)
{
fangzhen[i][j]=getchar();
}
}
//打印方阵代码
for(i=0;i<n;i++)
{
for(j=1;j<=n;j++)
{
tianjia(fangzhen[i][j]);//设置字母集合
printf("%c ",fangzhen[i][j]);
} printf("\n");
}
//循环依次判断
for(i=0;i<n;i++)
{
for(j=1;j<=n;j++)
{
for(k=j+1;k<=n;k++)
{
if(!xiangtong(i, j, k, fangzhen[i][j]))
break;
s=panduan(i,j, k, fangzhen[i][j], 0);
t+=s;
zimujilu(fangzhen[i][j], s);
}
}
}
//输出题目想要的~
printf("%d\n",t);
paixu();
i=0;
while(zimu[i][0]){
printf("%c: %d\n",zimu[i][0],zimu[i][1]);
i++;
}
}
我花了将近两个小时的哦~~
——~~~ ^_^ ~~
温馨提示:答案为网友推荐,仅供参考