1.题目描述
又到年底统计报表的时间了。我们公司一共生产“0”到“9”十种产品,现在给你一份销售记录,请你帮忙绘制一份直方图。
2.输入描述:
输入包含多组数据,每组数据包含一个字符串s。
s仅包含数字,长度不超过100。
3.输出描述:
对应每一组数据,依次为十种产品绘制高度等于其销量的“*”柱图。
直方图的高度等于数据中数量最多产品的个数,如果某种产品高度不到直方图的高度,用空格补全。
直方图下方依次输出0到9作为坐标。
4.输入例子:
0123456789123
123012312
5.输出例子:
***
**********
0123456789
**
***
****
0123456789
6.解题思路:
1、首先用一个整型数组记录的字符串中0-9每个数字的个数,也就是每个坐标的高度
2、然后根据每个坐标的高度,在二维字符数组中依次添加"*"号并记录最高的高度
3、因为二维数组初始化都为空格,为了保正输出时不输出超出最高高度的二维数组多余空格,所以要记录最高的高度
4、最后就是简单的输出二维数组的有效部分
7.源代码
#include<stdio.h>
#include<string.h>
int main()
{
char s[101];
while(scanf("%s",s)!=-1)
{
int i,j,max=0;
int pro[10];
int len=strlen(s);
char hg[100][10];
memset(pro,0,sizeof(pro));
memset(hg,' ',sizeof(hg));
for(i=0;i<len;i++)
{
j=s[i]-'0';
pro[j]++;
}
for(i=0;i<10;i++)
{
j=0;
while(pro[i])
{
hg[j++][i]='*';
pro[i]--;
}
if(max<j)
max=j;
}
for(i=max-1;i>=0;i--)
{
for(j=0;j<10;j++)
printf("%c",hg[i][j]);
printf("\n");
}
printf("0123456789\n");
}
return 0;
}