<枚举>

根据问题一一列出该问题的所有可能的解,并在逐一列出的过程中,检验每个可能的解是否是问题的正解。如果是采纳这个解,如果不是继续判断下一个。

<特点>

直观,容易理解,检查所有的可能性运行效率低。

<题目特点>

1、解枚举范围是有穷的

2、检验条件是确定的

<结构>

枚举范围循环+条件判断语句

&题目A&<第七届蓝桥c++试题>

某君说:“我的年龄是个两位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好是我儿子年龄。请你计算某君的年龄一共有多少可能?

<分析>

年龄的取值范围为[10,99]的整数,枚举年龄的个位与十位交换比原来数字刚好小27,即是一个正解。

<代码实现>

public class Main {
public static void main(String[] args) {
    int count=0;
    for(int i=10;i<=99;i++)
    {
        if(i-(i%10*10+i/10)==27)
        {
            count++;
        }
    }
    System.out.println(count);
}
}

&题目B&<第十三届蓝桥校内模拟赛>

如果⼀个整数 g 能同时整除整数 A 和 B,则称 g 是 A 和 B 的公约数。例如:43 是 86 和 2021 的公约数。 请问在 1(含) 到 2021(含) 中,有多少个数与 2021 存在⼤于 1 的公约数。请注意 2021 和 2021 有⼤于 1 的公约数,因此在计 算的时候要算⼀个。

<解题思路>枚举判断

<代码实现>

 public class Main {
public static void main(String[] args) {
   int count=0;
   for(int i=2;i<=2021;i++)
   {
       for(int k=2;k<=i;k++)
       {
           if(i%k==0)
           {
                   if(2021%k==0)
                   {
                       count++;
                       break;
                   }
           }
       }

   }
   System.out.println(count);
  }
}

<答案>89

&题目c&<第十三届蓝桥java b组 B题>

这天小明在数数,他突然发现有些正整数的形状像一座“山”,比如123565321,145541.他们左右对称(回文)且数位上的数字先单调不减,后单调不增。小明数了很久也没有数完,他想让你告诉他在区间[2022,202222202]中有多少个数的形状像山一样。

<解题方法>暴力枚举

<解题思路>

在区间内一一枚举判断是否是回文数。

<代码实现>

public class Main {
public static void main(String[] args) {
   int ans=0;
   for(int i=2022;i<=2022222022;++i)
   {
       if(check(i))
       {
           ans++;
       }
   }
   System.out.println(ans);
}
public static boolean check(int x)
{
    String s=String.valueOf(x);   //将其转化为字符串判断
    for(int i=0;i<s.length()/2;i++)
    {
        if(s.charAt(i)!=s.charAt(s.length()-i-1))  //判断是否是回文数
        {
            return false;
        }
    }
    for(int i=1;i<(s.length()+1)/2;i++)  //判断是否是前单调不增后单调不减
    {
        if(s.charAt(i)<s.charAt(i-1))
        {
            return false;
        }
    }
    return true;
  }
}

<答案>3138

&题目D&

李哥想知道今年跨年能否吃到疯狂星期四,他通过他的滔天手段查到了 100 年前也就是 1922 年到 1923 年的跨年夜星期天,他想知道今年跨年夜星期几?

<解题思路>

枚举判断

<代码实现>

 import java.util.Scanner;
public class Main {
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int count=0;
    int ant=0;
    for(int i=1922;i<=2022;i++)
    {
        if((i%4==0&&i%100!=0)||(i%400==0))
        {
            count++;
        }
    }
    System.out.println(count);
    ant=count*366+(100-count)*365;
    int num=0;
    num=ant%7;
    System.out.println(num);
 }
}

<答案>6