6、计数垂直直方图输出
2018-06-18 03:57:26来源:未知 阅读 ()
1 #include <stdio.h> 2 3 int main() 4 { 5 int c; //输入字符 6 int c_number[10]; //字符长度计数数组0-9 7 int n_max; //最大的次数 8 int i; //循环用 9 10 n_max = 0; 11 12 for (i=0; i<10; ++i) //数组初始化 13 c_number[i] = 0; 14 15 while ((c = getchar()) != '\n') //字符计数 16 { 17 if (c != ' ' && c != '\t') 18 ++c_number[c - '0']; 19 } 20 21 for (i=0; i<10; ++i) //取最大的计数值 22 { 23 if (c_number[i] >= n_max) 24 n_max = c_number[i]; 25 } 26 27 for (; n_max>0; --n_max) //循环输出 28 { 29 printf("\n%d ", n_max); 30 31 for (i=0; i<10; ++i) 32 { 33 if (c_number[i] >= n_max) 34 printf("|"); 35 else 36 printf("-"); 37 } 38 } 39 printf("\n 0123456789"); 40 return 0; 41 }
最开始做这个习题感觉头疼,因为垂直方向直方图绘制,从习惯上讲肯定是从左到右一列一列进行的
但是现在会的输出逻辑是从上向下的,冲突了,看过了规范解答也不知道怎么下手,想了很久才理清了一个思路:
[1]最终的输出方式肯定还是规规矩矩的行内从左至右,逐行进行输出
[2]那么这个垂直方向上的行号怎么定?水平方向上的下标号是固定的,但是垂直方向是动态变化的,如果某一个字符出现了10次
最上一行就是10,如果出现了100次,那最上一行就100。也就是说,最大的行号是和最大计数保持一致的,当一行输出
完成开始进行下一行时,此时的最大行号就要-1,这样一直循环持续到最小值1
[3]在行内从左至右输出时,就要从c_number[0]-c_number[9]依次进行,如果c_number[i]的计数值大于等于当前行对应的计
数值,那么就进行标记,输出一个'|'符号,如果小于,就要输出其它符号来进行区分了
PS:现在输出的计数和下标都比较小,只占用一个数据位,如果计数值稍微大一点,就会出现错位,更好的进行显示的话就要
加入对这个数值位数的判断了
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:二叉树的三种遍历简单版
- CountingSort(计数排序)原理及C++代码实现 2020-01-14
- 洛谷P4071-[SDOI2016]排列计数 题解 2020-01-12
- C++引用计数设计与分析(解决垃圾回收问题) 2019-12-29
- 常见排序算法(三) 2019-05-13
- 取模运算的一些性质 科学计数法 快速幂 2019-03-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash