gpt4 book ai didi

C++从随机函数中删除元素

转载 作者:行者123 更新时间:2023-11-30 04:05:22 26 4
gpt4 key购买 nike

我想创建一个 2D 数组 a[5][5],其中没有 2 个相同的数字,并且没有一个元素是 0(元素由函数 random( 70)) 所以我想知道如何删除零并确保没有 2 个相同的数字?

最佳答案

您可以使用如下内容

const size_t N = 5;
int a[N][N];

std::srand( ( unsigned int )std::time( 0 ) );

int *p = reinterpret_cast<int *>( a );

for ( size_t i = 0; i < N * N; i++ )
{
int x;

while ( !( x = std::rand() % 70 ) || std::find( p, p + i, x ) != p + i ) {}
p[i] = x;
}

举个例子

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>


int main()
{
const size_t N = 5;
int a[N][N];

std::srand( ( unsigned int )std::time( 0 ) );

int *p = reinterpret_cast<int *>( a );

for ( size_t i = 0; i < N * N; i++ )
{
int x;

while ( !( x = std::rand() % 70 ) || std::find( p, p + i, x ) != p + i );

p[i] = x;
}

for ( const auto &row : a )
{
for ( int x : row ) std::cout << x << ' ';
std::cout << std::endl;
}
return 0;
}

示例输出是

66 23 32 6 18 
8 31 55 10 43
39 2 28 4 56
5 58 47 46 68
59 25 26 9 50

这种方法不需要额外的内存。

另一种方法是使用 std::bitset。例如

const size_t N = 5; 
int a[N][N];

std::bitset<70> b;
b.set( 0 );


std::srand( ( unsigned int )std::time( 0 ) );


for ( size_t i = 0; i < N; i++ )
{
for ( size_t j = 0; j < N; j++ )
{
int x;

while ( ( x = std::rand() % 70, b[x] ) );
//or
//while ( b[x = std::rand() % 70] );

b.set( x );
a[i][j] = x;
}
}

关于C++从随机函数中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com