随机分配座位,共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) // bool 表达式。 作用是判断学生number 是否已分配过座位position。
{
for (int i = 0; i < pos; i++)
{
if (student[i] == number)
{
return true;
}
}
return false;
}
void RandSeat(int pos) // position随机分配studentNum函数
{
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是否无效,
// 1. 是否之前分配过,2. 是否与上一个position的studentNum相邻
{
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;
}

浙公网安备 33010602011771号