#include<conio.h>
int main(){
int result,count=0//count为计数器,result保存枚举的数
for(int i=0i<10i++){//千位0-9枚举
for(int j=0j<10j++){//百位0-9枚举
result=10000+i*1000+j*100+47
if(result%57==0||result%67==0){
printf("%d\n",result)
count++}
}
}
printf("总数为%d",count)
getch()
return 0
}
//在dev-c++上编译通过
枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。基本信息
中文名:枚举法
外文名:Enumeration method
定义:逐个考察了某类事件的所有可能
借助:计算机运算速度快精确度高特点
结构:while循环
算法:二进制加法,此时需要数组来帮忙
简介
枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。
在 数学和 计算机科学理论中,一个集的 枚举是列出某些有穷序列集的所有成员的 程序,或者是一种特定类型对象的 计数。这两种类型经常(但不总是)重叠。
特点
将问题的所有可能的答案一一 列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。例如:找出1到100之间的素数,需要将1到100之间的所有 整数进行判断。
枚举算法因为要列举问题的所有可能的答案,所有它具备以下几个特点:
1、得到的结果肯定是正确的;
2、可能做了很多的无用功,浪费了宝贵的时间,效率低下。
3、通常会涉及到求 极值(如最大,最小,最重等)。
4、数据量大的话,可能会造成时间崩溃。
结构
枚举算法的一般结构:while 循环。
首先考虑一个问题:将1到100之间的所有整数转换为 二进制数表示。
算法一
for i:=1 to 100 do begin
将i转换为 二进制,采用不断除以2, 余数即为转换为2进制以后的结果。一直除商为0为止。
end
算法二
二进制加法,此时需要数组来帮忙。
program p
var a:array[1..100] of integer{用于保存转换后的二进制结果}
i,j,k:integer
begin
fillchar(a,sizeof(a),0){100个数组元素全部初始化为0}
for i:=1 to 100 do begin
k:=100
while a[k]=1 do dec(k){找高位第一个为0的位置}
a[k]:=1{找到了立刻赋值为1}
for j:=k+1 to 100 do a[j]:=0{它后面的低位全部赋值为0}
k:=1
while a[k]=0 do inc(k){从最高位开始找不为0的位置}
write('(',i,')2=')
for j:=k to 100 do write(a[j]){输出转换以后的结果}
writeln
end
end.
枚举法,常常称之为 穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。
枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是,枚举所有的可能。
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
1.可预先确定候选答案的数量;
2.候选答案的范围在求解之前必须有一个确定的 *** 。
需要满足的特点:
1.要明确数据的搜索范围;
2.搜索范围必须可达,不能是无法计算的数据;
3.枚举的数据必须是明确的,离散的;
4.枚举过程中数据不能遗漏也能重复。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)