我有6行20列的排列:如何從C中的數組中隨機選取元素?
char name[6][20];
我進入names
與for
:
puts("Enter with 6 names :");
for(i=0; i< 6 ; i++)
{
scanf("%19[^\n]%*c",name[i]);
}
在那之後,我需要隨機選擇的排列顯示的三個名字他們在屏幕上。我怎樣才能做到這一點 ?
PS:與其他類似的問題不同,我不想只取一個單詞,而是整個單詞。
我有6行20列的排列:如何從C中的數組中隨機選取元素?
char name[6][20];
我進入names
與for
:
puts("Enter with 6 names :");
for(i=0; i< 6 ; i++)
{
scanf("%19[^\n]%*c",name[i]);
}
在那之後,我需要隨機選擇的排列顯示的三個名字他們在屏幕上。我怎樣才能做到這一點 ?
PS:與其他類似的問題不同,我不想只取一個單詞,而是整個單詞。
這裏是一個可能的解決您的問題,假設你存儲名稱數組,只需創建位置的數組,然後將它洗幾次這樣的位置是隨機的,最後挑3個位置(例如,前3個):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 6
#define COL 20
#define RND_NAMES 3
void shuffle(int *array, int n, int num_shuffles) {
srand((unsigned)time(NULL));
for (int j = 0; j < num_shuffles; j++) {
for (int i = 0; i < n - 1; i++) {
size_t j = i + rand()/(RAND_MAX/(n - i) + 1);
int t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}
int main() {
int i;
char name[ROWS][COL] = {"name1", "name2", "name3",
"name4", "name5", "name6"};
int positions[ROWS] = {0, 1, 2, 3, 4, 5};
shuffle(positions, ROWS, 100);
printf("%s\n", name[positions[0]]);
printf("%s\n", name[positions[1]]);
printf("%s\n", name[positions[2]]);
return 0;
}
用這種方法,你可以保證拿起3個隨機不重複的名字。
在這裏,我寫了一個簡單的解決方案,爲你想要實現的。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 6
#define COL 20
#define RND_NAMES 3
int main()
{
int i;
char name[ROWS][COL];
// init pseudo-random number generator
srand((unsigned)time(NULL));
puts("Enter with 6 names: ");
for (i=0; i < ROWS; i++) {
scanf("%19[^\n]%*c", name[i]);
}
puts("Random names: ");
for (i=0; i < RND_NAMES; i++) {
printf("%s\n", name[rand() % ROWS]);
}
return 0;
}
這可能會產生兩到三次相同的名稱。 –
確實,但在問題中,沒有指定不重複。 – Vic
在範圍[0-5]中生成一個隨機數,並用它來選擇名稱... –
「只是一個單詞」和「完整單詞」有什麼區別? –
@ScottHunter嘿,你不會問「一次性工作」和「全職工作」嗎? :) –