利用一个一维array对象解决问题。读入20个数,每个数在10~100之间(包括10和100)。在读入每个数时,确认这个数的有效性,并且若它和之前读入的数不一样,就把它存储到array对象中。读完所有的书之后,仅显示用户输入的不同的数值。假设“最糟糕的情况”是这20个数都不相同。请尽量用最小的array对象解决这个问题。
代码如下:
#include <iostream>
#include <array>
using namespace std; //思路:先将20个数全部存入array中,然后在输出时去除重复的数字
int main()
{
const size_t arraySize = 20;//定义常量指定array对象的大小为20
array < int,arraySize >M;
array < int,arraySize >Z;
array < int,arraySize >Q;
int frequency1 = 0;//统计输入的数值在10~100之间的个数
int frequency2 = 0;//统计在10~100之间且不重复的数值的个数
std::cout << "请输入20个数字:" << std::endl;
for( size_t i = 0;i < M.size(); ++i)//使用循环输入20个数字
{
std::cin >> M[i];//先将输入的20的元素全部存入
if(M[i]>=10&&M[i]<=100)
{
Z[i]=M[i];//将满足范围的数字存入另一个array对象中
++frequency1;//统计输入的数值在10~100之间的个数
}
}
for( size_t x = 0;x < frequency1; ++x)//利用双循环来去除重复的数值
{
for( size_t y = x + 1;y < frequency1; ++y)
{
if(Z[x] == Z[y])//判断是否有重复数字
{
++x; //当有重复数字时,则通过越过下标来越过重复的数字
y = x;
}
}
//std::cout << "用户输入的不同的数值如下:" << std::endl;
std::cout << Z[x] << std::endl;//将满足条件的数值输出
}
return 0;
}