用c++编写楼层分配问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 14:25:45
有一个楼层分配的问题,网上答案也好多了,但是我想知道,具体的解题思路,还有CD上下层和E比C高是怎么实现的?? 各位能不能帮帮我,谢谢啦~还有最好能把创新也做出来~我刚注册的,所以积分不多,只能请大家帮帮忙啦~
三、设计方法和基本原理
1. 课题功能描述
设计一个能够解决楼层分配问题的程序,要求实现的功能包括:找所有满足特定条件的楼层分配方案,然后输出(参见下图)。

2. 问题详细描述
特定条件:现有五层的公寓分配给A、B、C、D、E五个人住。其中A不住1楼,B不住5楼,C和D住上下楼(可以C比D住的高,也可以D比C住的高),E比C住的高。
要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。
可以利用穷举法,把所有楼层分配的可能都列出来,对每一种楼层分配进行判断,如果满足上述条件则输出。
四、主要技术问题的描述
可以声明一个数组用来代表楼层,例如数组的第一个元素代表1楼,第二个元素代表2楼,依次类推。然后用一个五层的循环来生成所有可能的楼层分配。
五、创新要求
在基本要求达到后,进行创新设计:
1. 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2. 用全排列算法来生成所有可能的楼层分配。

#include <iostream.h>
#include <math.h>
int psn[5]; //psn数组0-4分别代表a-e五个人,每个元素的值代表每个人住的楼层。
int select (int psn[]); //函数原型声明,第一种形式,过滤重复数组。
int judge (int psn[]); //函数原型声明,第二种形式,过滤不符和条件的数组。
void print (int psn[]); //函数原型声明,第三种形式,输出。
void main()
{
for(int i=1;i<=5;i++) //以下循环穷举所有可能,对PSn数组赋值,可能有数组元素重复的情况
{
psn[0]=i;
for(int j=1;j<=5;j++)
{
psn[1]=j;
for(int k=1;k<=5;k++)
{
psn[2]=k;
for(int l=1;l<=5;l++)
{
psn[3]=l;
for(int m=1;m<=5;m++)
{
psn[4]=m;
if (select(psn)) //调用selsct函数,过滤重复数组。
if (judge(psn)) //调用judge函数,过滤不符合条件的数组。
{
print(psn); //调用print函数,输出。
}
}
}
}
}
}

}
int select (int psn[]) //对穷举得到的数组进行过滤,只要数组中有两个以上元素相等的都返回0。
{
int temp;
for(int i=0;i<=4;i++) //比较