![]() |
|
![]() |
|
|
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 |
|
SEXY SHOELESS GOD OF WAR!
![]() Join Date: Jun 2005
Location: Wet west coast of Canada
Posts: 1,198
Rep Power: 5
![]() |
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)
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. - Vaarsuvius, Order of the Stick |
|
|
|
|
|
#3 |
|
Banned
![]() ![]() |
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.
__________________
Looking for tough programming challenges? Try participating in Sane's Monthly Algorithms Challenges! Composing Techno is a little side hobby of mine. Techno by DJ Sane. All free for download. |
|
|
|
|
|
#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 | |
|
SEXY SHOELESS GOD OF WAR!
![]() Join Date: Jun 2005
Location: Wet west coast of Canada
Posts: 1,198
Rep Power: 5
![]() |
Re: duplicate numbers in arrays
I made a boo-boo:
Quote:
if(!isValueInArray(n, list, idx))
{
list[idx] = n;
++idx;
}
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. - Vaarsuvius, Order of the Stick |
|
|
|
|
|
|
#6 |
|
SEXY SHOELESS GOD OF WAR!
![]() Join Date: Jun 2005
Location: Wet west coast of Canada
Posts: 1,198
Rep Power: 5
![]() |
Re: duplicate numbers in arrays
Double post, oops.
__________________
And once again, Probability proves itself willing to sneak into a back alley and service Drama as would a copper-piece harlot. - Vaarsuvius, Order of the Stick |
|
|
|
![]() |
| 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 5:55 PM |
| code to add numbers in an array | truBlu1 | Java | 9 | Oct 12th, 2007 11:08 PM |
| Arrays or Vectors? | can342man | C++ | 2 | Apr 20th, 2006 4:57 PM |
| Arrays in PHP | MrMan9879 | PHP | 6 | Jan 12th, 2006 10:18 PM |
| Median/Mode in arrays? {Need help} | Java|Tera | Java | 27 | Nov 29th, 2005 11:50 AM |