随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STUDENT_NUM 50
int student[STUDENT_NUM] = {0};
bool IsInSet(int pos, int number)
{
for (int i = 0; i < pos; i++)
{
if (student[i] == number)
{
return true;
}
}
return false;
}
void RandSeat(int pos)
{
if (pos == STUDENT_NUM)
{
return;
}
srand((unsigned int)time(NULL));
int studentNum = rand() % STUDENT_NUM + 1;
while (IsInSet(pos, studentNum) || (pos > 0 && (studentNum == student[pos - 1] + 1 || studentNum == student[pos - 1] - 1)))
{
studentNum = rand() % STUDENT_NUM + 1;
}
student[pos] = studentNum;
RandSeat(pos + 1);
}
int main()
{
RandSeat(0);
for(int i = 0; i < STUDENT_NUM; i++)
{
printf("%d\n", student[i]);
}
getchar();
return 0;
}
本文介绍了一种算法,用于在50名学生中随机分配座位,确保相邻的学生学号不相邻,通过使用随机数生成和递归函数实现这一目标。

被折叠的 条评论
为什么被折叠?



