题目:
https://www.luogu/com.cn/problem/P1598
思路:
先把需要的信息都搞出来;
再把信息储存到一个方便打印题目要求形式的数组里;
最后按要求打印数组。
上代码:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[4][105]= {0},letter[26]= {0},table[405][26];
int max=0;
for (int i=0; i<4; i++)
{
gets(arr[i]);
}//读取输入
for (int i=0; i<4; i++)
{
int len=strlen(arr[i]);//减少循环次数
for(int j=0; j<len; j++)
{
switch(arr[i][j])
{
case 'A':
letter[0]++;
break;
case 'B':
letter[1]++;
break;
case 'C':
letter[2]++;
break;
case 'D':
letter[3]++;
break;
case 'E':
letter[4]++;
break;
case 'F':
letter[5]++;
break;
case 'G':
letter[6]++;
break;
case 'H':
letter[7]++;
break;
case 'I':
letter[8]++;
break;
case 'J':
letter[9]++;
break;
case 'K':
letter[10]++;
break;
case 'L':
letter[11]++;
break;
case 'M':
letter[12]++;
break;
case 'N':
letter[13]++;
break;
case 'O':
letter[14]++;
break;
case 'P':
letter[15]++;
break;
case 'Q':
letter[16]++;
break;
case 'R':
letter[17]++;
break;
case 'S':
letter[18]++;
break;
case 'T':
letter[19]++;
break;
case 'U':
letter[20]++;
break;
case 'V':
letter[21]++;
break;
case 'W':
letter[22]++;
break;
case 'X':
letter[23]++;
break;
case 'Y':
letter[24]++;
break;
case 'Z':
letter[25]++;
break;
}//这个switch有更好的方式替代
}
}//统计出现次数
for(int i=0; i<26; i++)
{
if(max<letter[i])
max=letter[i];
}//找到需要多少行
for(int i=0; i<26; i++)
{
table[max][i]='A'+i;
}//把最后一行的字母先储存
for(int i=0; i<max; i++)
{
for(int j=0; j<26; j++)
{
table[i][j]=' ';
}
}//先全命成空格
for(int j=0; j<26; j++)
{
for(int i=max-1; max-1-i<letter[j]; i--)
{
table[i][j]='*';
}
}//该是*的赋成*
for(int i=0; i<=max; i++)
{
for(int j=0; j<26; j++)
{
if(j<25)
printf("%c ",table[i][j]);
else
printf("%c",table[i][j]);//不能有多余的空格
}
if(i<max)
printf("\n");//“最后一行不能有多余的换行符”
}
return 0;
}
欢迎指出问题,参与讨论。