枚举算法题目及其代码

1970-01-01 08:00

枚举算法题目及其代码 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、完美数 【问题描述】

1

古希腊人对数学作出了巨大贡献。欧几里德和毕达哥拉斯就是这个时代最杰出的数学家中的两位。欧几里德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。 【输出格式】

输出\或\注意大小写) 【输入样例】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);

2

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 8 9 10

【输出样例】apple.out 3

【参考程序】

var n,m,tot:word;

ap:array[1..2000]of word; tt:array[0..2000]of word; bo:array[1..2000]of boolean;

3

procedure init; var i:word; begin

assign(input,'apple.in');reset(input); readln(n,m);

for i:=1 to n do readln(ap[i]); tt[0]:=0;

for i:=1 to m do begin

readln(tt[i]); bo[i]:=true; end;

close(input); end;{init}

procedure work; var i,j,best:word; begin

tot:=m;

for i:=1 to n do begin

best:=0;

for j:=1 to m do

if(tt[j]tt[best])and(bo[j]) then best:=j; if best>0 then begin

bo[best]:=false; dec(tot); end; end; end;{work}

procedure print; begin

assign(output,'apple.out');rewrite(output); writeln(tot); close(output); end;{print} begin{main} init; work; print; end.

4

4、猫老大数(NUMBER. PAS) 【问题描述】

猫老大很喜欢研究数字,特别是喜欢质数。一天,猫老大发现有一些数字可以表示成两个质数相乘的形式。比如,10=2×5. 2,5都是质数,所以 10 是一个“猫老大数 ”。

所以猫老大决定考考彩虹,他告诉彩虹一个数 n ,判断 n 是不是“猫老大数”?

【输入格式】

一行,一个数 n (1<=n<=2^31-1). 【输出格式】

输出一行,如果 n 是一个“猫老大数”则输出 “It's a MaoLaoDa number.”否则输出“It's not a MaoLaoDa number.” 【输入样例】NUMBER.in 10

【输出样例】NUMBER.out It's a MaoLaoDa number. 【参考程序】 var n:longword; i:word; k:byte; begin

assign(input,'number.in');reset(input);

assign(output,'number.out');rewrite(output); k:=0; read(n);

for i:=2 to trunc(sqrt(n)) do if n mod i=0 then begin

inc(k);

if k>1 then continue; end;

if k=1 then writeln('It''s a MaoLaoDa number.')

else writeln('It''s not a MaoLaoDa number.'); close(input);close(output); end.

5、陶陶学数学(Pnumber.pas) 【问题描述】

陶陶很喜欢数学 ,尤其喜欢奇怪的数。一天,他突然发现,有的整数拥有的因子数是很有个性的,决定找到一个具有n个正因子数的最小的正整数。

例如:n=4,则m=6,因为6有4个不同正整数因子1,2,3,6;而且是最小的有4个因子的整数。 【输入文件】

仅一个数 n(1≤n≤50000)

5


枚举算法题目及其代码.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:有简答.案例分析《内部控制》

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: