天天看點

枚舉問題: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;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

}
           

繼續閱讀