题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入格式
四行字符,由大写字母组成,每行不超过100个字符
输出格式
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
输入输出样例
输入 #1
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG. THIS IS AN EXAMPLE TO TEST FOR YOUR HISTOGRAM PROGRAM. HELLO!
输出 #1
*
*
* *
* * * *
* * * *
* * * * * *
* * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
说明/提示
每行输出后面不允许出现多余的空格。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 26,M = 110;
int main(){
char a[M];
int aa[N];
memset(aa,0,sizeof aa);//这个置零搞了我好一会儿,这里不置为0,判断最大次数会有问题
for(int i = 0;i < 4;i++){
gets(a);
int n = strlen(a);
for(int j = 0;j < n;j++)
if(a[j] >='A' && a[j]<='Z'){
int c;
c = a[j] - 'A';
aa[c]++;
}
}
int maxn = 0;
for(int i = 0;i < 26;i++){
maxn = max(maxn,aa[i]);//找出出现次数最多的
}
for(int i = maxn;i > 0;i--)//从最大的情况往下输出
{
for(int j = 0;j < 26;j++)
{
if(aa[j] >= i) cout << "* ";//如果当前的次数大于的等于我们的i就*,也就是一个aa[j]可能会被判断很多遍
else cout << " ";
}
puts("");
}
for(int i = 0;i < 26;i++) printf("%c ",i + 'A');
return 0;
}
浙公网安备 33010602011771号