9种基本算法_枚举法

枚举法思想:把所有可能的答案一一列举,然后根据判断条件,合适就保留,不合适就丢弃。


算法思路:

1、确定问题解得范围

2、判断解是否符合判断条件

3、降低解的范围,重新判断


9种基本算法_枚举法_第1张图片

实例:百钱买百鸡

公鸡每只5元,母鸡每只3元,小鸡一元三只。用一百元钱买一百只鸡,求所有可能!?

for(int x = 0 ; x <= 100 ; x++){
        for(int y = 0 ; y <= 100 && x + y <= 100 ; y++){
            if((100 - x - y ) % 3 == 0 &&(5 * x + 3 * y + (100 - x - y) / 3) == 100){
                cout<<"公鸡:"<

实例:填写运算符

在下面算式中添加“+”,“-”,“*”,“/”,使等式成立。

5 5 5 5 5 = 5

 char opption[4] = {'+','-','*','/'};
    int no[5] = {5,5,5,5,5};
    int opp[4] = {0};
    int sign = 1;
    int count = 0;
    for (opp[0] = 0; opp[0] < 4; opp[0]++) {
        
        for (opp[1] = 0; opp[1] < 4; opp[1]++) {
            
            for (opp[2] = 0; opp[2] < 4; opp[2]++) {
                
                for (opp[3] = 0; opp[3] < 4; opp[3]++) {
                    int left = 0;
                    int right = no[0];
                    
                    for (int i = 0;  i < 4; i++) {
                        switch (opption[opp[i]]) {
                            case '+':
                                left += sign * right;
                                sign = 1;
                                right = no[i + 1];
                                break;
                            case '-':
                                left += sign * right;
                                sign = -1;
                                right = no[i + 1];
                                break;
                            case '*':
                                right *= no[i + 1];
                                break;
                            case '/':
                                right /= no[i + 1];
                                break;
                                
                            default:
                                break;
                        }
                    }
                    if(left + sign * right == 5){
                        count++;
                        cout<

  





你可能感兴趣的:(9种基本算法_枚举法)