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

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

 

 

例题:寒假作业

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

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\n",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;
}
posted @ 2020-02-20 11:41  远征i  阅读(503)  评论(0编辑  收藏  举报