枚举概念

枚举法是通过计算机速度快的特点,对问题所有可能性进行枚举,从中找到答案,需要利用循环。

例题

1,简单数字谜

题目描述

在□内填上一个合适的相同的数字,使等式“□3×6528=3□×8256”成立。

输入格式

输出格式

一个数字

样例输入

(无)

样例输出

4

 用一个for循环就行了,提示:循环从1开始到9。

代码也很简单

#include <bits/stdc++.h>//万能头
using namespace std;

int main(){
	for(int i=1;i<=9;i++){//朴实无华的for循环
		if((i*10+3)*6528==(30+i)*8256){
			cout<<i<<endl;
			return 0;//这个嘛,最好写上
		}
	}
	return 0;//养成好习惯
}

百钱买百鸡

题目描述

中国数学家张邱建(公元五世纪,其它资料不详)在他的《算经》中提出了著名的“百钱买百鸡”问题:

鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。

百钱买百鸡,问翁、母、雏各几何?

你的任务:输出所有可行的方案。

输入格式

输出格式

输出共有若干行:

每行三个整数,相互之间用1个空格隔开,依次为公鸡、母鸡、小鸡的数量。

所有方案,第一优先级按公鸡的数量从小到大排列。

样例输入

(无)

样例输出

(无)

代码很简单

#include <iostream>
 #include <cstdio>
 using namespace std;
 
 int main(){
     for(int i=0;i<=20;i++){
         for(int j=0;j<=33;j++){
             for(int k=0;k<=99;k+=3){
                 if(i+j+k==100 && i*5+j*3+k/3==100){
                     cout<<i<<" "<<j<<" "<<k<<endl;
                 }
             }
         }
     }
     return 0;
 }

枚举约数的优化

约数的分布具有规律(成对出现),可以从O(n)的复杂度优化到O(

循环读取枚举值Java 枚举类循环_c++

),提高了枚举的效率。

 需要注意的是,完全平方数有一对完全相同的约数

例题

统计约数

题目描述


给定一个正整数n,统计它有多少个约数。


输入格式


一个正整数n(1≤n≤2,000,000,000)。


输出格式


一个整数,为n的约数的个数。




样例输入


9


样例输出


3




  枚举两两组合

这种问题要判断是可以重复还是不可以重复

例题

2022数对

题目描述


如果两个数之和为 2022,则称这两个数组成了一个“2022 数对”。

现在,给定 n 个互不相同的整数,统计其中有多少对整数之和为 2022。


输入格式


第一行一个整数 n (n<10000) 。

第二行 n 个整数 ai (−10000≤ai≤10000) 。


输出格式


输出一个整数,为 2022 数对的数量,不能重复统计。




样例输入


51 2021 1000 1022 3


样例输出