gpt4 book ai didi

c++ - 如何使用两个 for 循环执行唯一的洗牌

转载 作者:行者123 更新时间:2023-11-28 04:26:01 24 4
gpt4 key购买 nike

我正在尝试编写一个名为 func1 的函数,它可以唯一地洗牌给定的一副纸牌(一个数组),给定另外两副牌,即起始牌和最终牌。例如,一副牌 [1, 2, 3, 4, 5] 被洗牌并产生另一副牌 [4, 5, 2, 1, 3]。我想完成同样的洗牌(将插槽 0 中的卡放入插槽 3,将插槽 1 中的卡放入插槽 2,等等),但这次是在另一副牌 [2、3、1、5、4] 上。如果我正确编写代码,它应该打印出 [5, 4, 3, 2, 1]。虽然它运行了程序,但它只正确打印了第一张“卡片”,其余的都是大数字。我做错了什么?我使用的方法是否正确,或者我应该重新考虑我的设计?

#include <iostream>
using namespace std;


int * func1(int *deck) // A unique shuffle given two decks, a starting and ending deck (in this case, "start" and "shuff1")
{
int start[5] = { 1,2,3,4,5 }; // Starting deck
int shuff1[5] = { 4,5,2,1,3 }; // Resulting deck after shuffle. This is the specific type of shuffle that we are copying
int finish[5] = {}; // The deck that we are returning

for (int i = 0; i < 5; i++) // Looks at a specific spot (i) in the start deck...
{
for (int j = 0; j < 5; j++) // Looks through all the spots (j) in the shuff1 deck...
{

if (start[i] == shuff1[j]) // And if the cards themselves are identical, then it takes the ith card
{ // in the given deck and puts it in the jth spot in the finish deck
int temp = deck[i];
finish[j] = temp;
j = 5;
}

}
}

return finish;

}

int main()
{
int test[5] = { 2,3,1,5,4 }; // Given deck
int* shuff2 = func1(test); // Calls a specifc shuffle and sets it equal to a deck called shuff2

for (int i = 0; i < 5; i++)
{
cout << shuff2[i] << endl; // Prints shuff2

}



return 0;
}

最佳答案

您的func1 返回指向finish 的指针,它是函数的局部变量。当控制传出函数时,该变量传出作用域——你可以说它过期了。因此指针指向无效内存荒野中的一个点,并取消引用指针(例如通过shuff2[i]) 导致未定义的行为,如果幸运的话,这意味着奇怪的数字。

一个解决方案是让 func1 在堆上构造 finish。另一个是让函数接受一个指向数组的指针,它应该用打乱的值填充;调用代码(例如 main)将负责提供指向有效数组的指针。

关于c++ - 如何使用两个 for 循环执行唯一的洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318199/

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