西工大10级保研机试 柱状图

1021.柱状图

时限:1000ms 内存限制:10000K 总时限:3000ms

描述
写一个程序,读入4行大写字母(每行不超过80个字符),打印出如Sample Output的一个垂直的柱状图显示出每个大写字母出现的次数(只显示大写字母,不显示空格、数字和标点符号等)。

输入
输入4行ASCII码字符,每行不超过80个字符。

输出
如图形式输出,输出中任何一行的行尾不能包含无用的空格,也不要在开始输出任何空行。

输入样例
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!


输出样例
*
*
* *
* * * *
* * * *
* * * * * *
* * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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

提示

A出现了5次 LAZY AN EXAMPLE HISTOGRAM PROGRAM因此有5个* 同理 B出现了1次 C出现了1次 D出现了2次 E出现了8次 …… 再看 O的第一行 前面用空格补齐 后面由于没有什么了 当然输出了相应的*后直接回车就行了(任 何一行的行尾不能包含无用的空格) 最后一行 输出了A ->Z后 就结束 不用输出回车

/***********************************
   author   : Grant Yuan
   time     : 201410/4 2:15
   source   : 西工大10级保研机试
   explain  : 水题,除了对格式要求很严
************************************/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>

using namespace std;
int n;
char a[100];
int num[256];
int main()
{
    memset(a,0,sizeof(a));int k,d;
    for(k=1;k<=4;k++)
    {
        memset(a,0,sizeof(a));
        gets(a);
        int l=strlen(a);
        for(int i=0;i<l;i++)
        {
            if(a[i]>='A'&&a[i]<='Z')
            {
                num[a[i]]++;
            }
        }
    }
    int l1='A',l2='Z',m=0;
    for(k=l1;k<=l2;k++)
    {
        if(num[k]>m) m=num[k];
    }
    while(1){
    for(k=l1;k<=l2;k++) if(num[k]>=m) d=k;
    for(k=l1;k<=l2;k++)
    {
        if(num[k]>=m){
                if(k<d) printf("* ");
                else printf("*");
        }
        else {if(k<d)printf("  ");}
    }m--;printf("
");
    if(m<=0) break;}
    printf("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");
    return 0;
}



原文地址:https://www.cnblogs.com/codeyuan/p/4254419.html