在我的c ++课程中,我们得到了分配对。通常我可以很容易地提出一个有效的算法,这次我无法弄清楚如何做到这一点来挽救我的生命。
我正在寻找的是有人解释一个算法(或者只是给我一些有用的提示),以便完成这项工作。我还处于计划阶段,希望自己完成这些代码以便学习。我需要一点帮助才能到达那里。
我们必须根据4或5整数输入创建直方图。它应该看起来像这样:
Calling histo(5, 4, 6, 2) should produce output that appears like:
*
* *
* * *
* * *
* * * *
* * * *
-------
A B C D
格式化就是杀了我。更糟糕的是,我们不能使用任何类型的数组或使用其他库的“高级”排序系统。
起初我以为我可以安排从最高到最低顺序的值。但后来我意识到我不知道如何在不使用sort函数的情况下做到这一点,我不知道如何从那里开始。
对任何可以帮助我开始这项任务的人都感到荣幸。 :)
答案 0 :(得分:1)
尝试以下内容:
使用这样的循环构建直方图:
for(int i = largest; i >= 1; i--)
在循环体内,执行步骤3到5(含)
如果i <= value_of_column_a
则打印*
,否则打印空格
对每一列重复步骤3(或写一个循环......)
打印换行符
使用-
打印列标签
答案 1 :(得分:0)
也许我错了你的q,但是如果你知道每一列中有多少项,那么打印就像你的例子一样容易:
步骤1:找到最大数字,存储在变量中,分配给列。
第2步:打印空格,直到找到最大值的列。打印明星。打印剩余的星星/空间。添加一个\ n字符。
第3步:查找下一个最大值在最大值> =最大值的列中打印星号,否则打印空格。添加换行符。最后。
步骤4:重复步骤3(直到下面的停止条件)
当您打印出等于最大最大值的星数时,您已经打印了所有这些。
步骤5:添加--------行和\ n
第6步:添加行标题和\ n
答案 2 :(得分:0)
如果我正确理解了问题,我认为问题可以解决这个问题:
a= <array of the numbers entered>
T=<number of numbers entered> = length(a) //This variable is used to
//determine if we have finished
//and it will change its value
Alph={A,B,C,D,E,F,G,..., Z} //A constant array containing the alphabet
//We will use it to print the bottom row
for (i=1 to T) {print Alph[i]+" "}; //Prints the letters (plus space),
//one for each number entered
for (i=1 to T) {print "--"}; //Prints the two dashes per letter above
//the letters, one for each
while (T!=0) do {
for (i=1 to N) do {
if (a[i]>0) {print "*"; a[i]--;} else {print " "; T--;};
};
if (T!=0) {T=N};
}
这样做,对于每个非零输入的数字,它将打印*然后减少输入的数字。当其中一个数字变为零时,它会停止为其列添加* s。当所有数字都变为零时(注意当T的值从 中出现为零时将发生这种情况。这就是变量T的用途)然后它就会停止。
我认为问题不在于直方图。请注意,它也不需要排序甚至不需要