我有一个包含6行和20列的数组:
char name[6][20];
我使用names
输入for
:
puts("Enter with 6 names :");
for(i=0; i< 6 ; i++)
{
scanf("%19[^\n]%*c",name[i]);
}
之后,我需要随机选择数组的三个名称并在屏幕上显示它们。我怎么能这样做?
PS:与其他类似的问题不同,我不想只拿一个单词,而是整个数组。
答案 0 :(得分:1)
这里可以解决你的问题,假设你已经存储了一系列名称,只需创建一个位置数组,然后将其洗牌几次,这样位置将是随机的,最后选择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个随机不重复的名称。
答案 1 :(得分:0)
在这里,我为你想要实现的目标写了一个简单的解决方案。
#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;
}