• 蓝桥杯省赛备战笔记—— (六)枚举 + 枚举练习题


    枚举就是根据提出的问题,一- -列出该问题的所有 可能的解,并在逐一-列出的过程中, 检验每个可能解是否是问题的真正解,
    如果是就采纳这个解,如果不是就继续判断下一个。
    枚举法- - -般比较直观,容易理解,但由于要检查所有的可能解,因此运行效率较低

    例题:寒假作业

    在这篇博客里解决过,有两种方法:

    https://www.cnblogs.com/expedition/p/12243498.html

    例题:方程的解

    样例输入

    1000

    样例输出

     6 8 30

    10 18 24

    #include<stdio.h>
    int main(){
        int n;
        scanf("%d",&n);
        for(int  a = 1;a * a <= n;a++){
            for(int b = a + 1; a*a + b*b <= n;b++){
                for(int c = b + 1;a*a + b*b+ c*c <= n;c++ ){
                    if(a*a + b*b+ c*c == n ){
                        printf("%d %d %d
    ",a,b,c);
                    }
                }
            }
        }    
        
        return 0;
    }

    例题:求最大子阵

    上一篇博客中也解决过

    https://www.cnblogs.com/expedition/p/12330848.html

    例题:四平方和 

     

    #include<stdio.h>
    #include<math.h>
    int get(int n){
        for(int a= 0; a*a <= n;a++){
            for(int b = a; a*a + b*b <= n;b++){
                for(int c = b; a*a + b*b + c*c <= n;c++){
                    int d = sqrt(  n - a*a - b*b - c*c);
                    if(a*a + b*b + c*c +d*d == n){
                        printf("%d %d %d %d",a,b,c,d);
                        return 0;
                    }
                }
            }
        }
    }
    int main(){
        int n;
        scanf("%d",&n);
        get(n);    
        return 0;
    }

     例题:装饰效果

     

    #include<stdio.h>
    int a[105];
    int main(){
        int n;
        scanf("%d",&n);
        for(int i = 0; i< n;i++){
            scanf("%d",&a[i]);
        }
        
        int ans = 0;
        int sum;
        for(int i = 0;i < n;i++){
            sum = 0;
            for(int j = i; j< n;j++){
                sum += a[j];
                if(sum > ans)
                    ans = sum;
            }
        }
        printf("%d",ans);
        return 0;
    }

     例题:双截棍

    #include<stdio.h>
    int a[105];
    int main(){
        int n;
        scanf("%d",&n);
        for(int i = 0; i< n;i++){
            scanf("%d",&a[i]);
        }
        int ans = 10000;
        for(int i = 0; i < n;i++){
            for(int j = i+ 1;j < n;j++){
                if(a[j] >= a[i]){
                    if(a[j] - a[i] < ans){
                        ans = a[j] - a[i];    
                    }
                }else{
                    if(a[i] - a[j] < ans){
                        ans = a[i] - a[j];
                    }
                }
            }
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    1722 最优乘车 1997年NOI全国竞赛
    tarjan算法详解
    codevs 原创抄袭题 5969 [AK]刻录光盘
    Kosaraju算法详解
    1722 最优乘车 未完成
    codevs原创抄袭题 5960 信使
    1405 奶牛的旅行
    android 管理Bitmap内存
    Dynamics CRM 2013 初体验(3):新增加的功能
    在android画面切换时设置跟随变动的小圆圈
  • 原文地址:https://www.cnblogs.com/expedition/p/12333042.html
Copyright © 2020-2023  润新知