永发信息网

free pacal一道题cd签售

答案:1  悬赏:0  手机版
解决时间 2021-05-06 10:03
  • 提问者网友:山高云阔
  • 2021-05-05 22:59
CD签售 【问题描述】 在Q迷的千呼万唤之下,N+Q终于推出了新专辑《My Cow Life》.其中一首《God is a cow》更是天籁之音,令Q迷们为之倾倒。可是,让Q迷们不爽的是,这张专辑是限量发行的,并且价格…….许多Q迷们在音像店前排起了长队,想要买到一张CD或者磁带。SGaPb小店的店长SGaPb是个热心人。他看到这么多Q迷想要买专辑,就设计了一个小游戏——抽奖。 规则是这样的:每位Q迷可以抽到一张奖券。奖券上写有1到M这M个自然数。Q迷可以在这M个数中任意选取N个不同的数打圈。每个Q迷只能买一张奖券,不同的奖券上的选择不同。每次抽奖将抽出两个自然数X和Y。如果某人拿到的奖券上,所选N个自然数的倒数和,恰好等于X/Y,则他将免费获得一张CD《My Cow Life》。 现在,已知抽奖结果X和Y。作为N+Q的fans,你的任务是:求出必须准备多少CD,才能保证支付所有获奖者。且对于同一种选数, SGaPb只用支付一盘CD。 【输入文件】 输入有且仅有一行,就是用空格分开的四个整数N,M,X,Y。 【输出文件】 输出有且仅有一行,即所需准备的CD数量。 【样例输入】 2 4 3 4 【样例输出】 1 【数据规模】 对于30%的数据,1<=N<=M<=15 对于60%的数据,1<=N<=M<=20 对于100%的数据,1<=N<=M<=25,X<=25,Y<=25 这就是我写的程序 哪位大虾帮我看一下program cd;
  var n,m,be,i,x,y:integer;
      s1,s2:real;
      num:array[0..26] of integer;
  procedure work(s3:integer);
    var i:integer;
    begin
      if s3>n then begin
                      for i:=1 to n do
                        begin
                          write(num[i]);
                          s2:=s2+(1/num[i]);
                        end;
                        writeln(s2);
                      writeln;
                  end;
      if (s3>n) and (s2=s1) then begin inc(be); s2:=0; end
      else  if s3<=n then begin
                            for i:=num[s3-1]+1 to m do
                              begin
                                num[s3]:=i;
                                work(s3+1);
                              end;
                          end;
    end;
  begin
  assign(input,'cd.in');
  reset(input);
  assign(output,'cd.out');
  rewrite(output);
    readln(n,m,x,y);
    s1:=x/y;
    writeln(s1);
    be:=0; num[0]:=0;
    work(1);
    writeln(be);
  close(input);
  close(output);
  end.                                            
最佳答案
  • 五星知识达人网友:不甚了了
  • 2021-05-06 00:01
program cd;
  var n,m,be,i,x,y:integer;
    s1,s2:real;
    num:array[0..26] of integer;
  procedure work(s3:integer);
    var i:integer;
    begin
    if s3>n then begin
    for i:=1 to n do
    begin
    write(num[i]);
    s2:=s2+(1/num[i]);
    end;
    writeln(s2);
    writeln;
    end;
    if (s3>n) and (s2=s1) then begin inc(be); s2:=0; end
    else  if s3<=n then begin
    for i:=num[s3-1]+1 to m do
    begin
    num[s3]:=i;
    work(s3+1);
    end;
    end;
    end;
  begin
  assign(input,'cd.in');
  reset(input);
  assign(output,'cd.out');
  rewrite(output);
    readln(n,m,x,y);
    s1:=x/y;
    writeln(s1);
    be:=0; num[0]:=0;
    work(1);
    writeln(be);
  close(input);
  close(output);
  end
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯