首页 > 解决方案 > 如何输出垂直直方图?

问题描述

我有一个字符串数组,其中包含 10 个国家/地区的名称(最大长度为 100)。我有另一个数组,其中包含该国家赢得的相应总金额。这两个数组如下所示:

char countryNames[10][100] = {"Japan", "USA", "China", "ROC", "UK", "Australia", 
                              "Kosova", "Italy", "France", "Canada"}

int totalMedals[10] = {13, 14, 18, 12, 7, 6, 2, 9, 5, 4}

所以日本赢得了 13 枚奖牌,美国赢得了 14 枚奖牌,等等。我很难找到一种方法来使用 * 以垂直直方图输出这些统计数据。这是我正在寻找的输出:

直方图示例输出

我找不到一个不是非常硬编码的解决方案。没有特定的间距,但我希望它看起来更像示例。谁能帮我做到这一点?

标签: coutputhistogram

解决方案


您可以通过逐行输出来输出垂直直方图。
即,您必须放弃整个“垂直”的想法,并通过大量的远见将所有内容都排成一行。

基本上:
第 1 步:查找pad,最长名称的长度。
步骤2:查找total,条目总数。
第 3 步:创建一个以换行符和零结尾的pad * total空白字符序列。
步骤 4:查找index,最高数字的索引。
步骤 5:将位置处的空白更改index * pad'*'
第 6 步:查找next,下一个最高数字的索引。
第七步:输出字符序列totalMedals[index]-totalMedals[next]次数。
第 8 步:将值复制nextindex.
第 9 步:从第 5 步开始重复直到完成,使用 0 作为最后一个数字。

然后您只需要根据喜好输出带有填充的名称。

这通过假设奖牌的唯一编号来简化,即没有两个具有相同的编号 - 就像您的输入数据中一样。(虽然我怀疑它实际上也可能适用于非唯一数字。)


推荐阅读