我看了看,但仍然迷失在如何从阵列中复制或获取元素并将它们放入新阵列中(分而治之是目标)。
我有一个生成100个随机数的数组。我需要将随机数分成4个较小的数组,显然包含25个元素,并且没有任何重复。我读过有关使用指针的内容,但老实说,我不明白为什么要使用指针。为什么我关心另一个变量地址?
我不知道该怎么做。到目前为止,这是我的代码:
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main()
{
// Seed the random number generator
srand(time(NULL));
//create an array to store our random numbers in
int Orignumbers[100] = {};
// Arrays for the divide and conquer method
int NumbersA [25] = {};
int NumbersB [25] = {};
int NumbersC [25] = {};
int NumbersD [25] = {};
//Generate the random numbers
for(int i =0; i < 100; i++)
{
int SomeRandomNumber = rand() % 100 + 1;
// Throw random number into the array
Orignumbers[i] = SomeRandomNumber;
}
// for(int i = 0; i < ) started the for loop for the other arrays, this is where I am stuck!!
// Print out the random numbers
for(int i = 0; i < 100; i++)
{
cout << Orignumbers[i] << " , ";
}
}
答案 0 :(得分:1)
&#34;分而治之&#34;很容易;复制到NumbersA
等时,您只需要使用适当的偏移量访问Originnumbers
,即0
,25
,50
和{{ 1}}:
75
关于&#34;没有重复的事情&#34;有点棘手。生成随机序列的唯一数字通常通过&#34; shuffling&#34;来解决。标准库提供了以下功能:
for(int i = 0; i < 25; i++) {
NumbersA[i] = Orignumbers[i];
NumbersB[i] = Orignumbers[i+25];
NumbersC[i] = Orignumbers[i+50];
NumbersD[i] = Orignumbers[i+75];
}
答案 1 :(得分:0)
当您使用C ++标记您的问题时,请忘记旧时尚数组,让它做C ++风格。 您希望将阵列拆分为4个阵列,并且不应 重复数字,因此您在原始阵列中不能有5次数,因为这样当然,你的4个阵列中的一个会有重复的阵列,所以这就是我建议的方式:
#include <set>
#include <ctime>
#include <vector>
int main() {
std::multiset<int> allNums;
std::srand(unsigned(std::time(0)));
for (int i = 0; i < 100; ++i) {
int SomeRandomNumber = std::rand() % 100 + 1;
if (allNums.count(SomeRandomNumber) < 4) {
allNums.insert(SomeRandomNumber);
}
else {
--i;
}
}
std::vector<int> vOne, vTwo, vThree, vFour;
for (auto iter = allNums.begin(); iter != allNums.end(); ++iter) {
vOne.push_back(*iter);
++iter;
vTwo.push_back(*iter);
++iter;
vThree.push_back(*iter);
++iter;
vFour.push_back(*iter);
}
system("pause");
return 0;
}
编辑:正如您在评论中提到的,您只想在数组中找到一个数字,那么如何:
for (int i = 0; i < 100; ++i) {
if (origArray[i] == magicNumber) {
cout << "magicNumber founded in index " << i << "of origArray";
}
}
答案 2 :(得分:0)
无法保证程序没有重复值,因为rand()
函数可以生成任何随机序列,并且可能包含99次的十进制值99次虽然概率非常低但是机会很多是即可。
例如:
for(loop=0; loop<9; loop++)
printf("%d", Rand()%10);
如果循环10次,可能会产生一些值,如:
Output: 6,1,1,1,2,9,1,3,6,9
Compiled Successfully:
因此,不确定价值不会重复
可以有一个解决方案,您可以将值放在OriginalArray
中,并将rand()
生成值与OriginalArray
值进行比较。
对于循环的第一次迭代,您可以直接将值赋给OriginalArray
,然后从循环的第二次迭代中将rand()
值与OriginalArray
进行比较,但插入时间消耗可能高于 O(N N )作为rand()
函数可能重复值。
可能的解决方案:
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main()
{
int Orignumbers[100] ;
int NumbersA [25] ,
NumbersB [25] ,
NumbersC [25] ,
NumbersD [25] ;
srand(time(NULL));
for(int i =0; i < 100; i++){
Orignumbers[i] = rand() % 100+1;
for(int loop=0; loop<i; loop++) {
if(Orignumber[loop] == Orignumber[i] ) {
i--;
break;
}
}
}
//Placing in four different arrays thats maybe needed.
for(int i = 0; i <25; i++ ) {
NumbersA[i] = Orignumbers[i];
NumbersB[i] = Orignumbers[i+25];
NumbersC[i] = Orignumbers[i+50];
NumbersD[i] = Orignumbers[i+75];
}
for(int i = 0; i < 99; i++)
cout << Orignumbers[i] << " , ";
}
答案 3 :(得分:0)