天天看点

枚举问题:POJ拨钟问题(傻傻的做法)

枚举问题: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;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

}
           

继续阅读