枚举问题:POJ拨钟问题(傻傻的做法)
/***********
枚举:poj拨钟问题
************/
#include <iostream>
using namespace std;
int main()
{
int clk[10];
int op[10];
int sum;
for(int i=1;i<=9;i++){
cin >> clk[i];
}
// 9个循环对应着9个操作的次数,其中每个操作如果执行四次那么就和没执行一样,
// 因此,枚举每个操作执行0到3次的情况
for(op[1]=0;op[1]<4;op[1]++){
for(op[2]=0;op[2]<4;op[2]++){
for(op[3]=0;op[3]<4;op[3]++){
for(op[4]=0;op[4]<4;op[4]++){
for(op[5]=0;op[5]<4;op[5]++){
for(op[6]=0;op[6]<4;op[6]++){
for(op[7]=0;op[7]<4;op[7]++){
for(op[8]=0;op[8]<4;op[8]++){
for(op[9]=0;op[9]<4;op[9]++){
// 对每种情况进行判断,将这轮情况对所有钟表的影响累加到sum上
// sum=0时即该情况就是操作步骤最少且满足条件的情况
sum=0;
sum += (clk[1] + op[1] + op[2] + op[4]) % 4; // 对钟表1有影响的分别是1 2 4个操作
sum += (clk[2] + op[1] + op[2] + op[3] + op[5]) % 4;
sum += (clk[3] + op[2] + op[3] + op[6]) % 4;
sum += (clk[4] + op[1] + op[4] + op[5] + op[7]) % 4;
sum += (clk[5] + op[1] + op[3] + op[5] + op[7] + op[9]) % 4;
sum += (clk[6] + op[3] + op[5] + op[6] + op[9]) % 4;
sum += (clk[7] + op[4] + op[7] + op[8]) % 4;
sum += (clk[8] + op[5] + op[7] + op[8] + op[9]) % 4;
sum += (clk[9] + op[6] + op[8] + op[9]) % 4;
if(sum==0){
for(int i=1;i<=9;i++){
while(op[i]--){
cout << i << " ";
}
}
return 0;
}
}
}
}
}
}
}
}
}
}
}