- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个代码,将每个元素至少打乱一次,但它对我不起作用。
我试过的代码是:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void show(int[],int);
void shuffle(int[],int,int*);
int main (void)
{
int karten[]={1,2,3,4,5,6,7,8,9,10};
int n = sizeof(karten)/sizeof(int);
int s=0;
srand(time(NULL));
printf("Karten vor dem Mischen: \n");
show(karten,n);
shuffle(karten,n,&s);
printf("Karten nach dem Mischen:\n");
show(karten,n);
return 0;
}
void show(int karten[],int n)
{
for(int i=0;i<n;i++)
{
printf("%d,",karten[i]);
}
printf("\n");
}
void shuffle(int karten[],int n,int *s)
{
int i=0;
int d=0;
int vi;
int vd;
int q;
*s=0;
int *v=(int*)malloc(sizeof(int)*n);
q=0;
while(1)
{
i=rand()%10;
d=rand()%10;
vi=karten[i];
vd=karten[d];
karten[d]=vi;
karten[i]=vd;
*s=*s+1;
v[i]=1;
v[d]=1;
for(int b=0;b<=n;b++)
{
if(v[b]==1)
{
q++;
}
}
if(q==n)
{
break;
}
}
printf("Es wurden %d Vertauschungen gemacht\n",*s);
free(v);
}
错误是代码有时能用,有时不能用。当它工作时,我认为它不能正常工作,因为洗牌时间是 (3) 或 (4)。我试图让它尽可能简单。
最佳答案
存在三个问题。
首先是您没有初始化 v
分配内存后。您应该将所有值设置为 0 或只使用 calloc
这将为您做到这一点。
第二个在 for
中循环检查是否所有牌都已洗牌:
for(int b=0;b<=n;b++)
你的数组索引 b
范围从 0
至 n
,但是因为数组有 n
元素,有效索引为 0
至 n-1
.所以改变<=
至 <
:
for(int b=0;b<n;b++)
第三个是在你使用q
.您应该将其初始化为 0
在 while
的开头循环,而不是在你输入之前。否则,您会将上一次运行的混洗元素计数添加到当前计数。
例如,假设在第一次迭代中 i
是 2 和 d
是 3。那么将交换 2 个元素。您将增加 q
到 2,所以现在 q
等于 2。现在假设在下一次迭代中 i
是 4 和 d
是5,一共交换了4个元素。所以你递增 q
4次。但是q
的值为 2
从上次迭代开始,所以现在 q
是6
.又一次迭代,q
将至少为 12。因此条件 q==n
永远不会遇见。
关于不能为每个元素洗牌一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34995627/
这是一个面试问题。请给一些提示: 使用 vector 实现一个方法,洗一副牌。 public class Card { private int value; Card(int v) {
我非常是 C++ 的新手,我还没有完全理解基本概念,但我的教授希望我们编写一个算法来洗牌和展示一副纸牌和一副牌需要表示为二维数组。 但是我在模拟一副纸牌时遇到了麻烦! #include #inclu
我想用 php 创建随机桥牌的集合。我认为我可以将一副有序的纸牌编码为下面的字符串 $deal(考虑到大写和小写时,我喜欢它有 52 个字母)。我发现了 php 函数 str_shuffle。所以我想
我想随机重新排序矩阵 A 的行以生成另一个新矩阵。如何在 R 中做到这一点? 最佳答案 使用 sample()以(伪)随机顺序生成行索引并使用 [ 重新排列矩阵. ## create a matrix
我计划在 android-Java 上开发一个简单的纸牌游戏,在我的应用程序中,我洗牌,所以我想知道将我的牌组存储在数组或堆栈中的最佳方法是什么..?堆栈的唯一问题是我不知道如何对其进行洗牌。 最佳答
我正在尝试创建一种方法,使用 Arraylist 随机打乱基元数组。我想知道 .get(); 方法是否是在我的 Arraylist 上使用的正确方法,在 for 循环中的普通数组上它只是 array[
我是 C++ 的新手,但是,我正在尝试创建一些盐和胡椒噪音。它几乎完成了,只是在这之间我想洗牌一个整数数组,无论我做什么,无论我使用什么洗牌功能,我总是得到令人讨厌的“从这里需要”,它没有告诉我任何事
我被要求编写一个程序(主要是一个方法)来洗牌。我编写了以下程序: public class Deck { //////////////////////////////////////// // Dat
我已经看到其他与此相关的话题,但似乎没有一个能回答我的问题。我尝试在 vector 上使用 shuffle() 函数,但我一直收到错误消息: deck_of_cards.cpp:34:5: error
是否与sort 一致导致更随机的数组或者是 sort这里只是浪费? use List::Util qw(shuffle); @random1 = shuffle sort keys %vocables
首先,这个问题是从 this 中摘下来的问题。我这样做是因为我认为这部分比较长问题的子部分更大。如有冒犯,请见谅。 假设您有一个生成随机性的算法。现在你如何测试它?或者更直接地说 - 假设您有一个洗牌
我正在制作一个配对游戏,其中有 8 个 ImageView 和 4 个不同的图像。我想知道页面何时加载是否可以交换 ImageView 的位置? 让每张图片的顺序每次都变? 最佳答案 试试这个:
我正在制作一款纸牌游戏,需要在游戏开始前洗牌。通过在将数组插入数据库之前对其进行混洗,可以毫无问题地完成此操作。然而,在游戏开始后,有些情况下玩家需要洗牌。我想到的唯一方法是重新洗牌后重新插入套牌,但
我正在运行一个网站,其中用户导航子目录的唯一方式是通过随机页面(类似于维基百科的随机页面功能)。我已经实现了调用随机页面的代码并且它工作正常,但我想尽量减少在 onclick 执行后再次调用同一页面的
我想用一个条件打乱一个 2d Numpy 数组。例如,仅随机播放非零值。 import numpy as np a = np.arange(9).reshape((3,3)) a[2,2] = 0 #
我将如何获取 RLMArray 并对其进行洗牌,以便 RLMArray 中的当前项目是随机的。 我已经查看了 RLMArray 的文档,但是我没有看到对其进行洗牌的好方法。 最佳答案 你最好的选择可能
在我的 Qt c++ 应用程序中,我有一个包含一组 QString 值的 QStringList!我想随机播放(任意更改 QStringList 中 QString 的位置)。 perl中是否有任何默
我知道它是如何工作的,但我在排序和配对方面仍然有问题,这样我才能确定获胜者。 将它们配对(配对是具有相同值(value)的卡片。)例如,红心 A 和黑桃 A 组成一对。然后我数那些对。拥有最高对子的手
我有一组这样的 div: 我需要在点击其中一个红色 div 时随机播放它们,但点击的 div 应该始终与黄色 div 交换。 fiddle here $('.box-red').click(funct
// deck of cards // below are initializations #include #include #include using namespace std; int
我是一名优秀的程序员,十分优秀!