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;
}