我正在尝试解决的问题是在用户将值输入到数组中时检查数组。具体说明是:使用单独的方法进行检查;该方法必须首先对数组进行排序;必须实时执行重复检查,这意味着用户不会先输入所有值,然后数组返回并检查它们。我环顾四周,虽然我已经想出如何排序,但我完全不知道如何在输入每个值时检查重复项。任何人都可以在正确的思维方向上推动我吗?
这就是我提出的,在任务范围内工作:
void getLottoPicks(int numbers[])
{
cout << "Please enter your 7 lotto number picks between 1 and 40: " << endl;
for (int i = 0; i < SIZE; i++)
{
cout << "Selection #" << i + 1 << endl;
cin >> numbers[i];
while (numbers[i] < 1 || numbers[i] > 40)
{
cout << "Please choose a number between 1 and 40: " << endl;
cin >> numbers[i];
}
for (int j = 0; j < i; j++)
{
while (numbers[i] == numbers[j])
{
cout << "You have already picked that number. Enter a different one: " << endl;
cin >> numbers[i];
}
}
}
}
它编译并运行没有任何错误(无论如何我都没有抓到)。如果有人有任何反馈,我们将不胜感激。我知道这种算法的效率非常低,但我们的数组只有7个值,这就是要求的。最初我认为它必须进行排序,但只有在我们选择在不同的功能中进行检查时才需要这样做。
答案 0 :(得分:2)
您可以通过多种方式实现这一目标。
首先,如果您只使用数组,请使用std :: sort和std :: unique。
如果数组中的最大数字不是很大,则可以维护一个bool数组,可以将其设置为0.
#include <cstring>
bool a[100000];
memset(a,0,sizeof a)
main(){
int x,i,arr[1000];
while(cin>>x){
if( a[x] == 0)
arr[i++]=x,a[x]=1;
}
在数组中输入值之前,检查该数字的a的索引值是否为0 如果为0,则输入数组中的值,标记布尔数组1的索引。 稍后您可以使用
进行排序 #include<algorithm>
sort(arr,arr+(size of arr));
3.您可以维护一个设置来输入值,而不是数组,它将是一个二叉树,并将丢弃任何重复的值,插入后的值将按排序顺序。
#include <set>
set <int> arr;
main(){
int x;
while(cin>>x)
a.insert(x);
}
您可以使用像
这样的迭代器从集合中获取值 set<int> :: iterator it;
答案 1 :(得分:1)
答案 2 :(得分:0)
由于您的数字是1-40之间的整数,因此您可以使用简单快速的解决方案(O(1))。你可以重复使用这个技巧来进行排序。以下是主要内容:
vals
。vals[input_value]
的值。如果是true
,则为重复,否则将其设为true
。vals[i]
为真,则放入其他数组或打印它。这是我的解决方案:
void getLottoPicks(int numbers[])
{
cout << "Please enter your 7 lotto number picks between 1 and 40: " << endl;
int value;
bool vals[41];
for (int i = 0; i <= 40; i++) vals[i] = false;
for (int i = 0; i < SIZE; i++)
{
cout << "Selection #" << i + 1 << endl;
bool input_ok = false;
while (!input_ok)
{
cin >> value;
if (value < 1 || value > 40) {
cout << "Please choose a number between 1 and 40: " << endl;
} else if (vals[value]) {
cout << "You have already picked that number. Enter a different one: " << endl;
} else {
input_ok = true;
}
}
vals[value] = true;
}
int j = 0;
for (int i = 1; i <= 40; i++) {
if (vals[i]) {
numbers[j++] = i;
}
}
}
该算法的灵感来自Counting Sort算法。 Counting Sort算法是一种非常简单有效的算法,可以在元素为小整数时使用。