<枚举>
根据问题一一列出该问题的所有可能的解,并在逐一列出的过程中,检验每个可能的解是否是问题的正解。如果是采纳这个解,如果不是继续判断下一个。
<特点>
直观,容易理解,检查所有的可能性运行效率低。
<题目特点>
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);
}
}