程序设计之值班排班程序
题目大意:从键盘录入每个施工人员自己认为合适的休息日。[尽可能考虑所有可能的情况] 例如每人选择的休息日如下: a:星期二、星期四 b:星期一、星期六 c:星期三、星期日 d:星期五 e:星期一、星期四、星期六 f:星期二、星期五 g:星期三、星期六、星期日 在屏幕上显示轮休的所有可能方案,当然必须使每个人都满意。
由于没有限制,就暴力解了,7层循环/(ㄒoㄒ)/~~ 亮点在输入的处理:二维字符串的形式,参照DFS和BFS的图形读入方法; 再转换为数组形式; 代码如下:
#include <iostream>
#include <cstring>
using namespace std;
char a[8][15];
int b[8][8];
int c[8]={
0};
int l1,l2,l3,l4,l5,l6,l7;
int main()
{
for( int i=0;i<7;i++)
{
cout<<"输入"<<" "<<i+1<<" "<<"号员工渴望放假的时间:"<<endl;
gets(a[i]);
}
for(int i=0;i<7;i++)
{
for(int j=0;j<15;j++)
{
if(a[i][j]<=7&&a[i][j]>=1)
{
b[i][c[i]]=a[i][j]-0;
c[i]++;
}
}
}
int t=1;
for(l1=0;l1<c[0];l1++)
{
for(l2=0;l2<c[1];l2++)
{
if(b[0][l1]==b[1][l2])
continue;
for(l3=0;l3<c[2];l3++)
{
if(b[2][l3]==b[0][l1]||b[2][l3]==b[1][l2])
continue;
for(l4=0;l4<c[3];l4++)
{
if(b[3][l4]==b[0][l1]||b[3][l4]==b[1][l2]||b[3][l4]==b[2][l3])
continue;
for(l5=0;l5<c[4];l5++)
{
if(b[4][l5]==b[0][l1]||b[4][l5]==b[1][l2]||b[4][l5]==b[2][l3]||b[4][l5]==b[3][l4])
continue;
for(l6=0;l6<c[5];l6++)
{
if(b[5][l6]==b[0][l1]||b[5][l6]==b[1][l2]||b[5][l6]==b[2][l3]||b[5][l6]==b[3][l4]||b[5][l6]==b[4][l5])
continue;
for(l7=0;l7<c[6];l7++)
{
if(b[6][l7]==b[0][l1]||b[6][l7]==b[1][l2]||b[6][l7]==b[2][l3]||b[6][l7]==b[3][l4]||b[6][l7]==b[4][l5]||b[6][l7]==b[5][l6])
continue;
cout<<"第"<<" "<<t<<" "<<"种情况:"<<endl;
t++;
cout<<"放假时间:"<<"1号员工"<<" "<<"2号员工"<<" "<<"3号员工"<<" "<<"4号员工"<<" "<<"5号员工"<<" "<<"6号员工"<<" "<<"7号员工"<<endl;
cout<<"第几天: "<<b[0][l1]<<" "<<b[1][l2]<<" "<<b[2][l3]<<" "<<b[3][l4]<<" "<<b[4][l5]<<" "<<b[5][l6]<<" "<<b[6][l7]<<endl;
}
}
}
}
}
}
}
if(t==1)
{
cout<<"别想放假了,滚蛋去!"<<endl;
}
/*for(int i=0;i<7;i++)
{
for(int j=0;j<c[i];j++)
{
cout<<b[i][j];
}
cout<<endl;
}*/
return 0;
}
暴力循环代码参考同学:
仅代表个人观点,欢迎交流探讨,勿喷~~~
PhotoBy:WLOP
