垂直柱状图
题目描述
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过 100 100 100 个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。
输入格式
四行字符,由大写字母组成,每行不超过 100 100 100 个字符
输出格式
由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。
样例 #1
样例输入 #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
提示
每行输出后面不允许出现多余的空格。
所需变量:
int jishu[30];//用来装每个字母分别有多少个,初始化为0
int i,j;//循环变量
int max;//用于统计最多的那个字母
int control;//用于来判断是否输入完毕
思路:我们每次只要看到一个字母就将他加起来,然后最后输入完之后,我们要找到一个max值,找到后,然后不断的相减,如果有一个字母跟他一样多个,那么我们就输出‘*’,否则就输出空格,直到max = 0,最后再把字母加上就可以了。
代码如下(编译器是dev,语言是C语言):
#include<stdio.h>
#include<stdbool.h>
char temp;
int jishu[30] = {0},i,j,control = 0,max;
int main(){
while(~scanf("%c",&temp)){
if(temp == '\n'){
control++;
if(control == 4){
break;
}
continue;
}
if((temp>='A')&&(temp<='Z')){
jishu[temp-64]++;
}
}
for(i = 1;i<=26;i++){
if(i == 1){
max = jishu[i];
}else{
if(max<jishu[i]){
max = jishu[i];
}
}
}
for(j = max;j>=1;j--){
for(i = 1;i<=26;i++){
if(i == 1){
if(jishu[i] == j){
jishu[i]--;
printf("*");
}else{
printf(" ");
}
}else{
if(jishu[i] == j){
jishu[i]--;
printf(" *");
}else{
printf(" ");
}
}
}
printf("\n");
}
for(i = 1;i<=26;i++){
if(i == 1){
printf("%c",i+64);
}else{
printf(" %c",i+64);
}
}
return 0;
}