程序设计之值班排班程序
题目大意:从键盘录入每个施工人员自己认为合适的休息日。[尽可能考虑所有可能的情况] 例如每人选择的休息日如下: 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