zoukankan      html  css  js  c++  java
  • 6、计数垂直直方图输出

     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()) != '
    ')     //字符计数
    16     {
    17         if (c != ' ' && c != '	')
    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("
    %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("
      0123456789");
    40     return 0;
    41 }

    最开始做这个习题感觉头疼,因为垂直方向直方图绘制,从习惯上讲肯定是从左到右一列一列进行的

    但是现在会的输出逻辑是从上向下的,冲突了,看过了规范解答也不知道怎么下手,想了很久才理清了一个思路:

    [1]最终的输出方式肯定还是规规矩矩的行内从左至右,逐行进行输出

    [2]那么这个垂直方向上的行号怎么定?水平方向上的下标号是固定的,但是垂直方向是动态变化的,如果某一个字符出现了10次

        最上一行就是10,如果出现了100次,那最上一行就100。也就是说,最大的行号是和最大计数保持一致的,当一行输出

        完成开始进行下一行时,此时的最大行号就要-1,这样一直循环持续到最小值1

    [3]在行内从左至右输出时,就要从c_number[0]-c_number[9]依次进行,如果c_number[i]的计数值大于等于当前行对应的计

        数值,那么就进行标记,输出一个'|'符号,如果小于,就要输出其它符号来进行区分了

    PS:现在输出的计数和下标都比较小,只占用一个数据位,如果计数值稍微大一点,就会出现错位,更好的进行显示的话就要

            加入对这个数值位数的判断了

  • 相关阅读:
    python基础之数值类型
    第一个python学习笔记
    入学潭州科技教育学习python语言
    Python 编码规范(Google)
    Python
    博客开通
    文件、异常、文件的输入输出
    内置函数,变量的作用域,闭包及递归
    序列类型各自的方法(1)
    函数基础
  • 原文地址:https://www.cnblogs.com/Gozz/p/7767134.html
Copyright © 2011-2022 走看看