我有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嘿,你不会问“一次性工作”和“全职工作”吗? :) –