我在查找数组中的第二个最小整数时遇到问题。数组是未排序的(这是data.txt文件中的内容),所以我知道这可能是问题的一部分,我不知道如何以最简单的方式解决这个问题。之后我必须从数组中删除该整数,移动每个数字并重新打印数组,如果有人可以帮助我真的很感激。
const NUM = 10;
int Array[NUM];
ifstream infile;
infile.open("Data.txt");
for (int i = 0; i < NUM; i++)
{
infile >> Array[i];
cout << Array[i] << endl;
}
int Min = Array[0];
int Next = 0, SecondMin = 0;
for (int k = 0; k < NUM; k++)
{
if (Min > Array[k])
Min = Array[k];
}
for (int m = 2; m < NUM; m++)
{
Next = Array[m];
if (Next > Min)
{
SecondMin = Min;
Min = Next;
}
else if (Next < SecondMin)
{
SecondMin = Next;
}
}
cout << "The second smallest integer is: " << SecondMin << endl;
答案 0 :(得分:0)
您不必遍历数组两次以找到第二个最小的数字。只要你跟踪最小和最小的两个,你应该能够通过一个循环找到它们。
此代码还有其他一些问题:
您对文件结尾的检查应该是if (!infile.eof())
您无需在循环中检查if (i < NUM)
。由于循环约束,i
将始终小于NUM
。
如果由于某种原因文件中的项目数小于NUM
,则数组中的其余项目将具有未定义的值。例如,如果文件中只有九个项目,那么在读取文件后,Array[9]
将在创建数组时在内存中的那个位置发生任何值。这可能会导致算法出现问题。
我认为这是某种家庭作业问题,这就是为什么需要使用数组的原因。但请记住,您可能希望在这种情况下使用std :: vector。这样你就可以继续读取文件中的数字并将它们添加到向量中,直到你到达终点,而不是有固定数量的输入,并且向量中的所有值都是有效的。