暴力枚举
标签: 机试攻略 - 高分篇
学习人数: 22.3k


高清播放
赞赏支持

定义

枚举算法是在分析问题时,逐个列举出所有可能情况,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃,最后得出一个结论。主要利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换区答案的全面性。

 

举例说明

有一个整数ABCD,一定是四位数,A不能为0,其中ABCD*4=DCBA。
其中A、B、C、D都是一个数字,求ABCD是多少?

如何解决这个问题呢?

我们可以直接枚举ABCD四个数的值

 

代码如下

#include <bits/stdc++.h>  
using namespace std;  
  
int main() {  
    for (int A = 0; A <= 9; A++) {  
        for (int B = 0; B <= 9; B++) {  
            for (int C = 0; C <= 9; C++) {  
                for (int D = 0; D <= 9; D++) {  
                    if (A == 0) continue;  
                    int s1 = A * 1000 + B * 100 + C * 10 + D;  
                    int s2 = D * 1000 + C * 100 + B * 10 + A;  
                    if (s1 * 4 == s2) printf("%d\n", s1);  
                }  
            }  
        }  
    }  
    return 0;  
}  


经过计算,答案为:2178

这种方法就是枚举,优点是直接了当,缺点是复杂度高。
我们可以做一个最简单优化,看最高位可知,D>=A*4,因此A只能取值1和2。

 

登录查看完整内容


课后作业

练习题目

DreamJudge 1348 百鸡问题
DreamJudge 1165 abc
DreamJudge 1274 Old Bill


登录后开始许愿

暂无评论,来抢沙发