问题 R: 柱状图表
时间限制: 1 Sec 内存限制: 128 MB题目描述
正在研究图表的KACA突然想到,能不能用字符来显示出来柱状图表。
所以他找到了一些字符串,他希望输出一个比较美观的柱状图表。
输入
多组测试数据,每组有一行由空格和大写字母构成的字符串。(0<strlen(s)<100)
输出
对于每组测试数据,根据字母的个数输出一张柱状图表,要求列与列中间有一个空格,并且行末不能出现多余空格。格式如样例所示。
样例输入
ABCDEFG IJKLMNOPQRSTUVWXYZ ABCDEFG ABCDEFG ABC AB A
样例输出
*
* *
* * *
* * * * * * *
* * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * *
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
思路:二维数组先存储
统计每个字符的个数,然后根据个数一行一行输出(可根据行号和个数判断是否需要输出*)。
读取需要使用while(gets(...)!=NULL){}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[110],str[110][110];
int b[110];
int main()
{
while(gets(a)!=NULL)
{
int ans=0;
memset(b,0,sizeof(b));
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]>='A' && a[i]<='Z')
{
b[a[i]-'A'+1]++;
if(ans<b[a[i]-'A'+1])
ans=b[a[i]-'A'+1];
}
}
for(int j=ans-1;j>=0;j--)
{
for(int i=1;i<=26;i++)
{
if(b[i]<=j)
str[ans-j+1][i]=' ';
else
str[ans-j+1][i]='*';
}
}
for(int j=ans-1;j>=0;j--)
{
for(int i=1;i<=26;i++)
{
if(i>1) printf(" ");
printf("%c",str[ans-j+1][i]);
}
printf("\n");
}
for(int i=0;i<26;i++)
{
if(i>0) printf(" ");
printf("%c",i+'A');
}
printf("\n");
}
return 0;
}