• poj 2136 Vertical Histogram 解题报告


         题目链接:http://poj.org/problem?id=2136

         题意不难理解,就是输入四行字符串(每行字符总数不超过72个),统计26个英文字母的数目,并按柱状图的形式输出。我的思路就是,先用一维数组total[]统计每个英文字母的个数,接着找出最大的频率,保存在max中;紧接着用一个二维数组word[][](这个比较关键)记录每一个字母在0~max中是否存储数据,有的话则置1,没有则为0。(假如:字母'A'的频率是2,max = 10,那么word[0][0] = 0, word[0][1] = 1, word[0][2] = 1, word[0][3] = 0......word[0][10] = 0,代表)接着用两重循环输出表格即可。

         

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 
     6 const int maxn = 30;
     7 
     8 int main()
     9 {
    10     char s[100];
    11     int i, j, n, len, max, total[maxn], word[maxn][100];
    12     n = 4;
    13     memset(total, 0, sizeof(total));
    14     while (n--)
    15     {
    16         gets(s);
    17         len = strlen(s);
    18         for (i = 0; i < len; i++)
    19         {
    20             total[s[i]-'A']++;    // 统计每个字母出现的次数(total[0]对应'A',total[1]对应'B',依此类推)
    21         }
    22     }
    23     max = total[0];
    24     for (i = 0; i <= 25; i++)
    25     {
    26         if (max < total[i])            // 在所有字母中找出最大的出现次数
    27             max = total[i];
    28     }
    29     memset(word, 0, sizeof(word));
    30     for (i = 0; i <= 25; i++)
    31     {
    32         for (j = 1; j <= total[i]; j++)
    33         {
    34             word[i][j] = 1;    // 标记每个字母出现的数目
    35         }
    36     }
    37     for (i = max; i > 0; i--)
    38     {
    39         for (j = 0; j <= 25; j++)
    40         {
    41             if (!word[j][i] && j == 0)
    42             {
    43                 printf(" ");
    44             }
    45             else if (word[j][i] && j == 0)
    46                 printf("*");
    47             else if (!word[j][i])
    48                 printf("  ");
    49             else if (word[j][i])
    50                 printf(" *");
    51         }
    52         printf("\n");
    53     }
    54     for (i = 0; i <= 25; i++)
    55     {
    56         if (i == 0)
    57             printf("%c", i + 'A');
    58         else
    59             printf(" %c", i + 'A');  
    60     } 
    61     printf("\n");
    62     return 0;
    63 }
  • 相关阅读:
    js操作FCKeditor方法(转)
    CommandArgument绑定多个值
    fckeditor给文件(包括图片)及文件夹增加删除功能
    linq中批量删除方法
    .net里使用 escape 和 unescape(转)
    类型转换
    MEP中创建基于面的风口族
    布尔运算符和位运算符
    循环结构之FOR语句
    坏天气
  • 原文地址:https://www.cnblogs.com/windysai/p/3204510.html
Copyright © 2020-2023  润新知