我正在做一个琐事游戏,并且函数中的问题有一个随机问题,我试图选择一个0、1或2的随机整数。然后,我将根据函数的结果指向一个函数并运行该功能。然后,我想这样做,以便确保当我再次执行此操作时,可以确保不再得到该整数,以免出现相同的问题。
这就是我现在拥有的
srand(time(NULL));
int randomnumber;
randomnumber = rand() % 3;
但是它只是获取0到2之间的随机整数,然后不允许我选择三个直接整数,如果运行,则将其从此数组中取出。
答案 0 :(得分:2)
有很多方法可供选择。其中之一是创建一个整数数组,在您的情况下,它的大小为三,其中的数字为0 ... 2。现在将这个数组改组。有很多算法可以做到这一点。一个示例为this。
现在,只需遍历这个新创建的shuffle数组即可调用函数。在这种情况下,您的两个要求都将得到满足。 问题将以随机顺序出现,您不会再拨打相同的电话号码。
此代码示例将帮助您入门:
void shuffle ( int arr[], int n ) {
srand ( time(NULL) );
//this will shuffle the array
for (int i = n-1; i > 0; i--){
// Pick a random index from 0 to i-1
int j = rand() % (i);
// Swap arr[i] with the element at random index
swap(&arr[i], &arr[j]);
}
}
int main(){
int arr[] = {0, 1, 2};
shuffle(arr, 3);
int i;
for(i = 0; i < 3; i++){
// call the function with shuffled array
}
}
您需要编写交换功能。
答案 1 :(得分:0)
对于少量项目,请使用无效值替换所选项目。
开关可用于处理随机项目。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main( void) {
char items[] = "012";
int each = 0;
srand ( time ( NULL));
while ( 1) {
if ( ! strcmp ( " ", items)) {
printf ( "all items used\n");
break;
}
do {//find an item that is not ' '
each = rand ( ) % 3;
} while ( items[each] == ' ');
switch ( items[each]) {
case '0':
printf ( "using item 0\n");
//do other things here as needed
break;
case '1':
printf ( "using item 1\n");
//do other things here as needed
break;
case '2':
printf ( "using item 2\n");
//do other things here as needed
break;
}
items[each] = ' ';//set used item to ' '
}
return 0;
}