gpt4 book ai didi

c - 打乱 5 元素数组以每次获得单独的顺序 C

转载 作者:行者123 更新时间:2023-11-30 21:45:15 27 4
gpt4 key购买 nike

我有一个数组int machine[5] = {1, 2, 3, 4, 5};我正在尝试找出一种有效地洗牌数组的方法,以便可以读取唯一的组合。这个想法是,不同的订单将自己输入到CRAFT程序中。谢谢

最佳答案

这是一个简单的随机播放程序,您可以根据需要进行扩展。

void swap_2_elements(int *m) - 随机交换数组中的 2 个元素。

void swap_2_elements_n_times(int *m, int ntimes) - 使用上述函数交换 2 个随机选择的元素 n 次。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


void swap_2_elements(int *m)
{
int i1; // random index 1
int i2; // random index 2
int v1; // value under undex i1
int v2; // value under undex i2

while(1)
{
i1 = rand()%5;
i2 = rand()%5;

if (i1!=i2) break;
}

v1 = m[i1];
v2 = m[i2];

m[i1] = v2;
m[i2] = v1;
}

void swap_2_elements_n_times(int *m, int ntimes)
{
int i;

for(i=0; i < ntimes; i++)
swap_2_elements(m);
}

// print table
void print_machine(int *m)
{
int i;
for(i=0; i<5; i++)
printf(" i=%i ", m[i]);

printf("\n");
}

void remember_last_array(int *m1, int *m2)
{
int i;
for(i=0; i<5; i++)
m1[i] = m2[i];
}

int are_arrays_same(int *m1, int *m2)
{
int i;

for(i=0; i<5; i++)
{
if(m1[i] != m2[i])
return 0; // no
}

return 1; // yes
}

int main()
{
int i;
int machine1[5] = {1, 2, 3, 4, 5};
int machine2[5] = {1, 2, 3, 4, 5};

// Print 10 sets:
for(i = 0; i < 10; i++) // each next set is different than the previous one, but it may repeat later!
{
while(1)
{
swap_2_elements_n_times(machine2,6); // swap two elements 6 times in the table machine
if( are_arrays_same(machine1, machine2) == 1 ) // compare with the previous set
continue; // sets are the same!

remember_last_array(machine1,machine2);
break; // set is different from previous one
}

print_machine(machine1);
}

return 0;
}

输出:

 i=1  i=5  i=4  i=3  i=2 
i=2 i=5 i=3 i=4 i=1
i=4 i=1 i=2 i=5 i=3
i=5 i=1 i=3 i=4 i=2
i=3 i=1 i=4 i=5 i=2
i=4 i=5 i=1 i=2 i=3
i=5 i=4 i=1 i=3 i=2
i=4 i=2 i=3 i=5 i=1
i=3 i=4 i=1 i=2 i=5
i=3 i=4 i=5 i=1 i=2

关于c - 打乱 5 元素数组以每次获得单独的顺序 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621299/

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