# no repeatition of numbers in two arrays

Page 1 of 1

## 9 Replies - 632 Views - Last Post: 25 January 2018 - 06:39 AMRate Topic: //<![CDATA[ rating = new ipb.rating( 'topic_rate_', { url: 'http://www.dreamincode.net/forums/index.php?app=forums&module=ajax&section=topics&do=rateTopic&t=408903&amp;s=58e787aa79d22712fcbeed8e1eb9470c&md5check=' + ipb.vars['secure_hash'], cur_rating: 0, rated: 0, allow_rate: 0, multi_rate: 1, show_rate_text: true } ); //]]>

### #1 abai

Reputation: 1
• Posts: 11
• Joined: 25-July 17

# no repeatition of numbers in two arrays

Posted 23 January 2018 - 09:25 PM

Hi there.

I have scrolling for two days to find the code on how to make sure there is no repetition of numbers when randomly generate a set of arrays say a[i] and b[i], and let the number generated is between -20 and 20, for example. I am getting stuck here. I am a c++ beginner and really need help here.

Hope to hear some suggestion. thanks.
Is This A Good Question/Topic? 0

## Replies To: no repeatition of numbers in two arrays

### #2 modi123_1

• Suitor #2

Reputation: 13755
• Posts: 54,922
• Joined: 12-June 08

## Re: no repeatition of numbers in two arrays

Posted 23 January 2018 - 09:38 PM

What have you tried, thought about, or considered?

### #3 snoopy11

• Engineering ● Software

Reputation: 1437
• Posts: 4,626
• Joined: 20-March 10

## Re: no repeatition of numbers in two arrays

Posted 23 January 2018 - 11:22 PM

Well why not try to solve the logic of the problem yourself instead of trying to find ready made code online.

you have two arrays say array_one[10] and array_two[10] be descriptive with your naming conventions calling them a or b is just lazy or better still use two vectors.

you generate a random number and add it to array_one and increment a counter variable by one.

you then have a loop to generate the 9 other random numbers

loop counter to 10

generate random number

check to see if the number exists in array_one with a loop from 0 to counter
if it doesnt exist add the number to array_one at position counter and increment counter else decrement outer loop variable by one.

this will generate an array of random numbers that are unique.

next up is the second array do something similar but this time instead of just checking to see if the numbers are unique in array_two also check if the number exists in array_one which is fully populated at this point so a loop from 0 to the total size of array_one is needed and use an AND in your if statement to do the cross checking.

For advanced users the problem could be simplified by the use of std::unique

http://www.cplusplus...gorithm/unique/

This post has been edited by snoopy11: 23 January 2018 - 11:33 PM

### #4 Thomas1965

• D.I.C Regular

Reputation: 82
• Posts: 320
• Joined: 09-September 16

## Re: no repeatition of numbers in two arrays

Posted 24 January 2018 - 03:12 AM

Another option is to use a std::set<int> and fill it with random numbers so they automatically will be unique.
Then you copy your set into the arrays or even better vectors.

### #5 abai

Reputation: 1
• Posts: 11
• Joined: 25-July 17

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 12:56 AM

snoopy11, on 23 January 2018 - 11:22 PM, said:

Well why not try to solve the logic of the problem yourself instead of trying to find ready made code online.

you have two arrays say array_one[10] and array_two[10] be descriptive with your naming conventions calling them a or b is just lazy or better still use two vectors.

you generate a random number and add it to array_one and increment a counter variable by one.

you then have a loop to generate the 9 other random numbers

loop counter to 10

generate random number

check to see if the number exists in array_one with a loop from 0 to counter
if it doesnt exist add the number to array_one at position counter and increment counter else decrement outer loop variable by one.

this will generate an array of random numbers that are unique.

next up is the second array do something similar but this time instead of just checking to see if the numbers are unique in array_two also check if the number exists in array_one which is fully populated at this point so a loop from 0 to the total size of array_one is needed and use an AND in your if statement to do the cross checking.

For advanced users the problem could be simplified by the use of std::unique

http://www.cplusplus...gorithm/unique/

### #6 snoopy11

• Engineering ● Software

Reputation: 1437
• Posts: 4,626
• Joined: 20-March 10

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 01:12 AM

Ok do you have a point ?

Apart from just quoting me ?

### #7 abai

Reputation: 1
• Posts: 11
• Joined: 25-July 17

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 01:36 AM

```#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>

#define MAX 30
#define EPS 0.1

void repeated_root(void);

void algorithm(double[]);

int factorial (int);
void Binomial (int,int);

int i,j,k,n,t,order,iter,num_poly=0,round=0,orderp,orderq;
double a[MAX],A[MAX],b[MAX],c[MAX],C[MAX],d[MAX],aa[MAX],binomial[MAX][MAX];
double root[MAX],alfa[MAX],z[MAX],rootc[MAX],rootp[MAX],rootq[MAX],roota[MAX],rootb[MAX];
double tmp1,tmp2;

void main()
{
char Mychoice;
puts("\n****COMPUTING COEFFICIENTS OF POLYNOMIAL WITH DIFFERENT BASES****");

while(1)
{
puts("	1	repeated roots");
puts("	x	Exit");
printf("My choice is  ");

Mychoice=getche();
if( Mychoice=='x' || Mychoice=='X')
{
printf("\n*******Goodbye*******\n");
return;
}

switch(Mychoice)
{
case '1':repeated_root();
return;
}
}
}

//=====repeated root
void repeated_root()
{
int seq[MAX]; //define

//Generate random roots of c between -20 to 20
srand((unsigned)time(NULL));
while ((order<1) || (order>10))
{
printf("\nPolynomial c degree (2~10): ");
scanf("%d",&order);
}
//Initialize seq to an ordered range
for (i=-10;i<=10;i++)
seq[i]=i;
//Random shuffle
for (i=-10;i<9;i++)
{
int r=(rand()%(10-i)+1);
int save=seq[i];
seq[i]=seq[i+r];
seq[i+r]=save;
}
for (i=0;i<=10;i++)
rootc[i]=seq[i];

//Generate random roots of p between -20 to 20/
srand((unsigned)time(NULL));
while ((orderp<1) || (orderp>10))
{
printf("\nPolynomial p degree (1~10): ");
scanf("%d",&orderp);
}
//Initialize seq to an ordered range
for (i=-10;i<=10;i++)
seq[i]=i;
//Random shuffle
for (i=-10;i<9;i++)
{
int r=(rand()%(10-i)+1);
int save=seq[i];
seq[i]=seq[i+r];
seq[i+r]=save;
}
for (i=0;i<=10;i++)
rootp[i]=seq[i];

//Generate random roots between -20 to 20
srand((unsigned)time(NULL));
while ((orderq<1) || (orderq>10))
{
printf("\nPolynomial q degree (1~10): ");
scanf("%d",&orderq);
}
//Initialize seq to an ordered range
for (i=-10;i<=10;i++)
seq[i]=i;
//Random shuffle
for (i=-10;i<9;i++)
{
int r=(rand()%(10-i)+1);
int save=seq[i];
seq[i]=seq[i+r];
seq[i+r]=save;
}
for (i=0;i<=10;i++)
rootq[i]=seq[i];

algorithm(root);
}

void algorithm(double root[])
{
double tmp1,tmp2;
//======Determine coefficients
printf("\nInput roots are 1,2,...,n\n");
printf("		real		imaginary\n");

printf("\nc is:\n");
for(i=1;i<=order;i++)
{

printf("rootc[%d]=	%lf	  0\n",i,rootc[i]);
}
printf("\np is:\n");
for(i=1;i<=orderp;i++)
{

printf("rootp[%d]=	%lf	  0\n",i,rootp[i]);
}
printf("\nq is:\n");
for(i=1;i<=orderq;i++)
{

printf("rootq[%d]=	%lf	  0\n",i,rootq[i]);
}

//caling for a
printf("\na is:");
for(i=1;i<=order;i++)
{
roota[i]=rootc[i];
printf("\na[%d]=	%lf	",i,roota[i]);
}
for(i=1+order;i<=order+orderp;i++)
{
roota[i]=rootp[i-order];
printf("\na[%d]=	%lf	",i,roota[i]);
}

//caling for b
printf("\n\nb is:");
for(i=1;i<=order;i++)
{
rootb[i]=rootc[i];
printf("\nb[%d]=	%lf	",i,rootb[i]);
}
for(i=1+order;i<=order+orderq;i++)
{
rootb[i]=rootq[i-order];
printf("\nb[%d]=	%lf	",i,rootb[i]);
}
getch();
}
```

this is a part of the coding that i get from a senior which i dont fully understand as i am new to this c++.

but basically what i want is to generate rooota[i] and rootb[i] such that roota[i](combination of rootc[i] and rootp[i]) and rootb[i](rootc[i] and rootq[i]). now i am stuck to make sure that i dont generate the same random number in either rootc[i], rootp[i] and rootq[i] (because i dont really know where to edit and what to edit actually)

I am not very familiar with std::unique because all i've done up to now is basic c++ programming without using any class/function/subfunction.

I thanks @snoopy11 for telling me your thoughts because that is actually what i meant. but still after googling, i dont quite understand.

snoopy11, on 25 January 2018 - 01:12 AM, said:

Ok do you have a point ?

Apart from just quoting me ?

that was a mistake because i am still learning how to use this site.

### #8 snoopy11

• Engineering ● Software

Reputation: 1437
• Posts: 4,626
• Joined: 20-March 10

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 01:49 AM

Yeah...

I totally broke it down for you into manageable pieces...

It will take work and effort to code those individual pieces but my suggestion to you now is get to work...

### #9 Thomas1965

• D.I.C Regular

Reputation: 82
• Posts: 320
• Joined: 09-September 16

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 05:00 AM

Are you sure you want to write C++, the code you posted is just old C apart from #include <iostream>
In arrays the first index is 0 and the last index is array size - 1 so this will most likely crash:
```  for (i=-10;i<=10;i++)
seq[i]=i;

```

### #10 Skydiver

• Code herder

Reputation: 6010
• Posts: 20,652
• Joined: 05-May 12

## Re: no repeatition of numbers in two arrays

Posted 25 January 2018 - 06:39 AM

abai, on 25 January 2018 - 03:36 AM, said:

but basically what i want is to generate rooota[i] and rootb[i] such that roota[i](combination of rootc[i] and rootp[i]) and rootb[i](rootc[i] and rootq[i]). now i am stuck to make sure that i dont generate the same random number in either rootc[i], rootp[i] and rootq[i] (because i dont really know where to edit and what to edit actually)

This is pretty easy to do. In pseudo code:
```Let array source, but an array that can hold N * 3 numbers
where N is the size of arrays rootc, rootp, and rootq

Fill source with unique random numbers

for(int i = 0; i < N; i++)
{
rootc[i] = source[i];
rootp[i] = source[N + i];
rootq[i] = source[N * 2 + i];
}

```

So now, you are just back to your original problem of generating an array of unique "random" numbers.

Personally, I take issue with calling this "random". Consider the case of flipping a coin. If you first flip heads, that means that next "unique" random coin flip MUST be tails, otherwise it is not unique. How random is that if you can predict what the next number will be? Random is supposed to be random. You have no guarantees whether the next random number you get will be the same as a number that you had previously seen.

As noted in the code that was given to you by your friend, the correct word is "shuffle".