![]() |
|
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Newbie
Join Date: Mar 2008
Posts: 1
Rep Power: 0
![]() |
duplicate numbers in arrays
Hi, I've been lurking here for a while now and decided to make an account to get help. The program I'm trying to write is supposed to:
Read in 20 numbers, each of which is between 10 and 100, inclusive. As each number is read in, validate it and store it in the array only if it is not a duplicate of a number already read. After reading all the values, display only the unique values that the user has entered. I have the program functionally working except I don't know what to do for the duplicate cases. Is there an easy way to skip the value entered if duplicate? #include <iostream>
using namespace std;
#include <iomanip>
int main() {
int idx = 0;
int list[20];
int n;
int i;
cout << "Enter 20 integers between 10 and 100: " << endl;
for (i=0; i<20; i++){ // user inputs 20 numbers
cin >> n;
if (n < 10 || n > 100){ // input must be between 10 and 100
cout << "invalid entry" << endl;
}
list[idx] = n; //sets each number to the next element in array
++idx;
}
for ( int j = 0; j < 10; j++ )
cout << list[ j ] << " "; // print numbers in array
system("pause");
return 0;
} |
|
|
|
|
|
#2 |
|
Caffeinated Neural Net
Join Date: Jun 2005
Location: Dry west coast of Canada
Posts: 927
Rep Power: 4
![]() |
Re: duplicate numbers in arrays
The easiest (but not the most efficient) method is to iterate through the array, checking to see if the number is present. If so, don't add it. You can write a function for this:
C++ Syntax (Toggle Plain Text)
C++ Syntax (Toggle Plain Text)
C++ Syntax (Toggle Plain Text)
You're also not printing out all the valid values the user entered, unless this happens to be 10. Try making your printing loop like so: C++ Syntax (Toggle Plain Text)
__________________
A man's knowledge is like an expanding sphere, the surface corresponding to the boundary between the known and the unknown. As the sphere grows, so does its surface; the more a man learns, the more he realizes how much he does not know. Hence, the most ignorant man thinks he knows it all. - L. Sprague de Camp |
|
|
|
|
|
#3 |
|
Programming Guru
![]() Join Date: Apr 2005
Posts: 1,799
Rep Power: 5
![]() |
Re: duplicate numbers in arrays
There's a neat trick you can use to do this.
Use an array of zeroes. For each number they enter, set the n'th element to 1. After you're done, print out all elements that are 1. This automatically stops itself from printing out duplicates, because setting an element to 1 twice still keeps it at 1. Also, your validation of each number did not stop it from being added to the array. The assignment specifies to include duplicates as one of the 20 numbers, but do not count invalid numbers as one of the 20. int main() {
int idx = 0;
int list[101] = {0}; // make an array of 101 zero's
int n;
int i;
cout << "Enter 20 integers between 10 and 100: " << endl;
for (i=0; i<20; i++) { // user inputs 20 numbers
do {
cout << "Enter number " << i+1 << ": ";
cin >> n;
} while (n < 10 || n > 100); // input must be between 10 and 100
list[n] = 1; // this tells us the n'th number has been used
}
for ( int j = 10; j <= 100; j++ )
if(list[j] == 1)
cout << j << " "; // index of all numbers that have a 1
system("pause");
return 0;
}Note that this does not mantain the order the numbers were inputted. If you need to mantain the order, you could keep your original code, and then use this method to output the array. As you're outputting it, set the element to 1. Then make sure you don't output a number if the list is set to 1 for that value. |
|
|
|
|
|
#4 |
|
I eat cake for breakfast.
![]() ![]() ![]() ![]() Join Date: Jul 2004
Location: In my box.
Posts: 4,434
Rep Power: 9
![]() |
Re: duplicate numbers in arrays
This sounds like a homework assignment to me, so I'm not sure if you'd be allowed to do this, but it would be really easy with sets. Sets are a type of data structure which are always ordered and can only store unique values, which sounds like what you're looking for. There's a set class in the STL.
To initialise a set: set<int> list; list.insert(n); And to get stuff out: for (set<int>::iterator i = list.begin(); i != list.end(); i++) {
cout << *i << " ";
} |
|
|
|
|
|
#5 | |
|
Caffeinated Neural Net
Join Date: Jun 2005
Location: Dry west coast of Canada
Posts: 927
Rep Power: 4
![]() |
Re: duplicate numbers in arrays
I made a boo-boo:
Quote:
if(!isValueInArray(n, list, idx))
{
list[idx] = n;
++idx;
}
__________________
A man's knowledge is like an expanding sphere, the surface corresponding to the boundary between the known and the unknown. As the sphere grows, so does its surface; the more a man learns, the more he realizes how much he does not know. Hence, the most ignorant man thinks he knows it all. - L. Sprague de Camp |
|
|
|
|
|
|
#6 |
|
Caffeinated Neural Net
Join Date: Jun 2005
Location: Dry west coast of Canada
Posts: 927
Rep Power: 4
![]() |
Re: duplicate numbers in arrays
Double post, oops.
__________________
A man's knowledge is like an expanding sphere, the surface corresponding to the boundary between the known and the unknown. As the sphere grows, so does its surface; the more a man learns, the more he realizes how much he does not know. Hence, the most ignorant man thinks he knows it all. - L. Sprague de Camp |
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| prime numbers now with arrays | gmann145 | C++ | 2 | Feb 19th, 2008 4:55 PM |
| code to add numbers in an array | truBlu1 | Java | 9 | Oct 12th, 2007 10:08 PM |
| Arrays or Vectors? | can342man | C++ | 2 | Apr 20th, 2006 3:57 PM |
| Arrays in PHP | MrMan9879 | PHP | 6 | Jan 12th, 2006 9:18 PM |
| Median/Mode in arrays? {Need help} | Java|Tera | Java | 27 | Nov 29th, 2005 10:50 AM |