【发布时间】:2018-05-08 20:22:50
【问题描述】:
我是一名初级程序员,我需要一些帮助。 我需要编写一个程序,从用户那里读取一个由 10 个数字组成的数组,然后对其进行扫描并找出数组本身中最常见的数字并打印出来。如果数组中只有一个公共数字,则只打印该数字。但是,如果有不止一个数字出现不止一次,也按照它们在数组中出现的顺序打印它们。 例如 - 1 2 3 3 4 5 6 7 8 9 - 输出为 3 For- 1 2 3 4 1 2 3 4 5 6 - 输出为 1 2 3 4 for- 1 1 1 1 2 2 2 3 3 4 - 输出为 1 2 3
现在,我遇到的问题是,每当我有一个重复两次以上的数字时(参见上面的第三个示例),我得到的输出就是该数字的循环迭代次数而不仅仅是那个数字一次。 欢迎任何帮助。
代码附在下面-
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int array [10], index, checker, common;
main ()
{
for (index=0; index<10; index++)
{
cin >> array [index];
}
for (index=0; index<10; index++)
{
int tempcount=0;
for (checker=(index+1);checker<10;checker++)
{
if (array[index]==array[checker])
tempcount++;
}
if (tempcount>=1)
cout << array[index]<<" ";
}
return 0;
}
【问题讨论】:
-
问题在于您的算法只检查在当前实例之后是否存在该值的另一个实例,这归结为找到不是最后一个值的每个实例。
-
完全正确。这就是我想要弄清楚的
-
想想你的代码在做什么。如果一个值出现 3 次,外部循环将遇到它 3 次。第一次,内部循环会将
tempcount计算为2并打印该值。第二次,tempcount将计算为1,因此将再次打印该值。为了解决这个问题,您需要以某种方式记录以前打印过的值,以便不再打印它们。