枚举算法题目及其代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
枚举算法题目及其代码 By LYLtim
1、砝码称重(Weight)
【问题描述】
设有1g,2g,3g,5g,10g,20g的砝码各若干枚(其总重≤1000g)。【输入格式】
a1 a2 a3 a4 a5 a6(表示1g砝码有a1个,2g砝码有a2个,..20g砝码有a6个)
【输出格式】
Total=N (N表示用这些砝码能称出的不同重量的个数,不包括一个砝码也不用的情况)
【输入样例】weight.in
1 1 0 0 0 0
【输出样例】weight.out
Total=3,表示可以称出1g,2g,3g三种不同的重量
【参考程序】
var i,a1,a2,a3,a4,a5,a6,s:word;
a:array[1..6]of word;
b:array[0..1000]of boolean;
begin
assign(input,'weight.in');reset(input);
assign(output,'weight.out');rewrite(output);
fillchar(b,sizeof(b),false);
s:=0;
for i:=1 to 6 do read(a[i]);
for a1:=0 to a[1] do
for a2:=0 to a[2] do
for a3:=0 to a[3] do
for a4:=0 to a[4] do
for a5:=0 to a[5] do
for a6:=0 to a[6] do
if not b[a1+a2*2+a3*3+a4*5+a5*10+a6*20] then
begin
b[a1+a2*2+a3*3+a4*5+a5*10+a6*20]:=true;
inc(s);
end;
writeln('Total=',s-1);
close(input);close(output);
end.
2、完美数
【问题描述】
古希腊人对数学作出了巨大贡献。欧几里德和毕达哥拉斯就是这个时代最杰出的数学家中的两位。欧几里德23卷的《几何原本》仍然是被认为学习数学的基础读物。
欧几里德对毕达哥拉斯提出的“完美数”问题作了重要贡献。6是完美数,6=1+2+3,刚好是其因数之和(小于6的因数)。另一个完美数是28,28=1+2+4+7+1。
在《几何原本》第九卷,欧几里德找到了所有偶完美数。(后来在20世纪才证明所有的完美数都是偶数)欧几里德证明一个偶数如果满足以下形式就是完美数:2^(p–1)*(2^p–1),其中p和2^p–1都是质数。2000年后,欧拉证明了欧几里德定理的逆命题:每一个偶完美数都是欧几里德形式。例如6 = 2^(2–1)*(2^2–1), 28 = 2^(3–1)*(2^3–1)。
完美数很少。到1975年,只发现24个完美数,前4个完美数是6,28,496,8128。相应的p是2,3,5,7
给你一些整数p(不一定是质数)。请你判断2^(p–1)*(2^p–1)是不是完美数。最大的完美数不超过2^33。
【输入格式】
输入文件仅一行,为p。
【输出格式】
输出"Yes"或"No"(注意大小写)
【输入样例】number.in
2
【输出样例】number.out
Yes
【参考程序】
const max=131071;
var pr:array[1..max]of boolean;
p:byte;
procedure eratos;
var i,j:word;
begin
fillchar(pr,sizeof(pr),true);
pr[1]:=false;
for i:=2 to max div 2 do
if pr[i] then for j:=2 to max div i do
pr[i*j]:=false;
end;{eratos}
begin{main}
eratos;
assign(input,'number.in');reset(input);
assign(output,'number.out');rewrite(output);
readln(p);
if(pr[p])and(pr[trunc(exp(p*ln(2)))-1])then writeln('Yes') else writeln('No');
close(input);close(output);
end.
3、苹果摘陶陶(apple.)
【问题描述】
话说去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了好多份,然后把他们挂在树上,准备摘取。
摘取的规则是,一个苹果只能摘一个陶陶,且只能在它所能摘到的高度以下(即是小于关系)的最高的陶陶,如果摘不到的话只能灰溜溜的走开了。给出苹果数目及每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后剩下多少个陶陶……
【输入格式】
第一行为两个数,分别为苹果的数量n和陶陶的数量m(n,m<=2000)
以下的n行,分别为各个苹果能够到的最大高度。
再接下来的m行,分别为各个陶陶的高度。
高度均不高于300。当然了,摘取的顺序按照输入的“苹果够到的最大高度”的顺序来摘。
【输出格式】
输出仅有一个数,是剩下的陶陶的数量
【输入样例】apple.in
5 5
9
10
2
3
1
6
7