我正在使用C ++程序将随机值存储在1000大小的数组中。 然后程序会要求用户输入X' X'最大的' Y'最小的数字。 ' X'和' Y'是小于数组大小的任何整数值。 程序将输出' X'最大的' Y'数组中的最小数字。
假设数组有1 2 4 7 9 14 3
X = 2
Y = 3
输出
数组中最大的2个数字是14 9
数组中最小的3个数字是1 2 3
#include<iostream>
using namespace std;
int main()
{
int size[1000];
int x, y, max;
max = 0;
cout << "How many Largest numbers do you need ?\n";
cin >> x;
cout << "How many Smallest numbers do you need ?\n";
cin >> y;
for (int i = 0;i <= 999;i++)
{
size[i] = rand() % 100;
cout << "No." << i << " = " << size[i] << endl;
}
for (int j = 1;j <= x;j++)
{
for (int i = 0;i <= 999;i++)
{
if (size[i] > max)
max = size[i];
}
cout << "LARGEST NUMBERS\n" << max << endl;
}
}
答案 0 :(得分:1)
您的错误可能来自于每次迭代后您没有重置max的事实。这很难分辨,因为你没有真正提出任何要求。
试试这个:
for (int j = 1;j <= x;j++)
{
max = size[0];
for (int i = 1;i <= 999;i++)
{
if (size[i] > max)
max = size[i];
}
cout << "LARGEST NUMBERS\n" << max << endl;
}
为最小输出实现类似的嵌套for循环。
这是一个已经过测试的基于列表的版本。
#include <iostream>
#include <list>
int main()
{
std::list<int> intList;
int x, y;
std::cout << "How many Largest numbers do you need ?\n";
std::cin >> x;
std::cout << "How many Smallest numbers do you need ?\n";
std::cin >> y;
for (int i = 0;i <= 9;i++)
{
auto a = rand() % 100;
intList.push_back(a);
std::cout << "No." << i << " = " << a << std::endl;
}
for (auto j = intList.end(); j != intList.begin();)
{
std::cout << "Listdump: " << *--j << std::endl;
}
intList.sort();
int count2x = 0;
for (auto j = intList.end(); j != intList.begin();)
{
if (count2x == x) {break;}
std::cout << "LARGEST NUMBERS\n" << *--j << std::endl;
count2x++;
}
}
答案 1 :(得分:-1)
以下是使用std::set的解决方案。由于std::set
已经对其条目进行了排序,而且不存储重复项,因此解决方案变得非常简单:
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <set>
int main()
{
int size[1000];
int x, y;
std::cout << "How many Largest numbers do you need ?\n";
std::cin >> x;
std::cout << "How many Smallest numbers do you need ?\n";
std::cin >> y;
srand(0); // seed random number
// generate the numbers in the array
std::generate(size, size + 1000, []{return rand() % 1000;});
// create a std::set consisting of the numbers in the array
std::set<int> intSet(size, size + 1000);
std::generate
功能自动&#34;循环&#34;并使用随机值填充数组。
std::set<int>
构造函数只是使用数组中的值创建std::set
。请注意,这将自动排序和删除重复的条目。
完成此操作后,只需打印出x
中的第一个y
号码和最后std::set
个号码即可。
// print the smallest numbers
auto iter1 = intSet.begin(); // beginning of the set
int i = 0;
while (i < y)
{
std::cout << *iter1 << " ";
++iter1;
++i;
}
std::cout << "\n";
// print the largest numbers
auto iter2 = intSet.rbegin(); // end of the set. We will loop backwards
i = 0;
while (i < x)
{
std::cout << *iter2 << " ";
++iter2;
++i;
}
}
从集合的末尾开始向后打印最大的数字,这就是使用反向迭代器的原因。
注意:您必须在打印出值的循环中放置检查,以确保迭代器不会落在集合的开头和结尾。我把它留给你作为练习。