回 帖 发 新 帖 刷新版面

主题:关于数组和埃及分数的题目向大家请教

1.在一个元素组成的表中,出现次数最多的元素称为众数,写一个寻找众数的算法。

2.设计一个程序,把一个真分数表示为埃及分数之和的形式。
     所谓埃及分数,是指分子为1的形式。古代埃及有一个非常奇怪的习惯,他们喜欢把一个分数表示为若干个分子为1的分数之和的形式。如,7/8=1/2+1/3+1/24。

回复列表 (共8个回复)

沙发

算法??要程序马?
开一个数组,下标表示数,元素表示出现次数
读入,读到就加
输出元素最大的下标
var
  s:array[1..maxint+1]of longint;
  i,j,k:longint;
begin
  fillchar(s,sizeof(s),0);
  while not eoln do
    begin
      read(i);
      inc(s[i]);
    end;
  k:=0;
  for i:=1 to maxint+1 do
    if s[i]>k then begin k:=s[i]; j:=i; end;
  if i=maxint+1 then i:=0;
  writeln(j);
end.

板凳

每次都麻烦你真不好意思,我是自学学的很吃力但我很有毅力学,我知道自己这方面慧根不够可我不想放弃,就算勤来补拙吧,谢谢了

3 楼

顺便请问下面这句中的“maxint+1”是啥意思?
s:array[1..maxint+1]of longint;

4 楼

第二题有人会做吗?请教请教,多谢了

5 楼

就没人会做第二题吗?

6 楼

还是没人做,我就继续等待,期待中

7 楼

program tju1029;
var
  d,ans:array[0..99]of cardinal;
  n,i,a,b,depth,t:cardinal;
  succeed:boolean;
function min(a,b:cardinal):cardinal;
  begin
    if a<b then min:=a else min:=b;
  end;
function max(a,b:cardinal):cardinal;
  begin
    if a>b then max:=a else max:=b;
  end;
function gcd(a,b:cardinal):cardinal;
  var
    t:cardinal;
  begin
    if a<b then begin t:=a;a:=b;b:=t;end;
    repeat
      t:=a mod b;a:=b;b:=t;
    until t=0;
    gcd:=a;
  end;
procedure subtract(x:cardinal);
  var
    t:cardinal;
  begin
    t:=gcd(b,x);
    a:=x div t*a-b div t;b:=b div t*x;
    if a=0 then exit;
    t:=gcd(a,b);
    a:=a div t;b:=b div t;
  end;
procedure search(l:byte);
  var
    i,ta,tb:cardinal;
  begin
    if l=depth then begin
      if (a>1) or (b<=d[l-1]) or (b>=ans[l]) then exit;
      ans:=d;ans[l]:=b;
      succeed:=true;
    end
    else
      for i:=max(d[l-1]+1,trunc(b/a)+1) to min(trunc((depth-l+1)/(a/b)+1e-6),ans[depth]-1) do begin
        d[l]:=i;ta:=a;tb:=b;
        subtract(i);
        search(l+1);
        a:=ta;b:=tb;
      end;
  end;
begin
  d[0]:=1;
  read(n);
  for i:=1 to n do begin
    fillchar(ans,sizeof(ans),255);
    read(a,b);t:=gcd(a,b);a:=a div t;b:=b div t;
    depth:=0;
    succeed:=false;
    repeat
      inc(depth);
      search(1);
    until succeed;
    for a:=1 to depth-1 do
      write(ans[a],' ');
    writeln(ans[depth]);
  end;
end.

8 楼

感谢归感谢,就是看不懂,都怪自己太钝

我来回复

您尚未登录,请登录后再回复。点此登录或注册