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三种不同的重量
【参考程序】

//By LYLtim
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
【参考程序】

//By LYLtim
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
8
9
10
【输出样例】apple.out
3
【参考程序】

//By LYLtim
var n,m,tot:word;
    ap:array[1..2000]of word;
    tt:array[0..2000]of word;
    bo:array[1..2000]of boolean;

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]<ap[i])and(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、猫老大数(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.
【参考程序】

//By LYLtim
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)
【输出文件】
仅一个数 m
【样例输入】pnumber.in
4
【样例输出】pnumber.out
6
【参考程序】

//By LYLtim
var n,x,t,i:word;
begin
    assign(input,'pnumber.in');reset(input);
    assign(output,'pnumber.out');rewrite(output);
    readln(n);
    x:=0;
    repeat
        inc(x);t:=0;
        for i:=1 to x do
            if x mod i=0 then inc(t);
    until t=n;
    writeln(x);
    close(input);close(output);
end.

6、子数整数
【问题描述】
    对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
    例如,五位数20207可以拆分成
sub1=202
sub2=020(=20)
sub3=207
    现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,sub3都可被K整除。
【输入格式】
输入由键盘输入,输入仅一行,为正整数K(0<K<1000)。
【输出格式】
输出到文件,输出文件的每一行为一个满足条件的五位数,要求从小到大输出。不得重复输出或遗漏。如果无解,则输出“No”。
【输入样例】num.in
15
【输出样例】num.out
22555
25555
28555
30000
【参考程序】

//By LYLtim
var k,i:word;
    no:boolean;

begin
    assign(input,'num.in');reset(input);
    assign(output,'num.out');rewrite(output);
    no:=true;
    readln(k);
    for i:=10000 to 30000 do
        if((i div 100)mod k=0)and(((i div 10)mod 1000)mod k=0)and((i mod 1000)mod k=0) then
            begin
                writeln(i);
                if no then no:=false;
            end;
    if no then writeln('No');
    close(input);close(output);
end.

posted on 2011-08-05 10:49  shallyzhang  阅读(800)  评论(0)    收藏  举报