主题:关于数组和埃及分数的题目向大家请教
			
 96131
				 [专家分:0]  发布于 2006-04-12 21:35:00							
			1.在一个元素组成的表中,出现次数最多的元素称为众数,写一个寻找众数的算法。
2.设计一个程序,把一个真分数表示为埃及分数之和的形式。
     所谓埃及分数,是指分子为1的形式。古代埃及有一个非常奇怪的习惯,他们喜欢把一个分数表示为若干个分子为1的分数之和的形式。如,7/8=1/2+1/3+1/24。
						
					 
		
			
回复列表 (共8个回复)
		
								
				沙发
				
					
贺天行宝 [专家分:2300]  发布于 2006-04-13 19:44:00				
				算法??要程序马?
开一个数组,下标表示数,元素表示出现次数
读入,读到就加
输出元素最大的下标
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.
							 
						
				板凳
				
					
96131 [专家分:0]  发布于 2006-04-14 15:24:00				
				每次都麻烦你真不好意思,我是自学学的很吃力但我很有毅力学,我知道自己这方面慧根不够可我不想放弃,就算勤来补拙吧,谢谢了
							 
						
				3 楼
				
					
96131 [专家分:0]  发布于 2006-04-14 15:28:00				
				顺便请问下面这句中的“maxint+1”是啥意思?
s:array[1..maxint+1]of longint;
							 
						
				4 楼
				
					
96131 [专家分:0]  发布于 2006-04-17 16:47:00				
				第二题有人会做吗?请教请教,多谢了
							 
						
				5 楼
				
					
96131 [专家分:0]  发布于 2006-04-19 10:44:00				
				就没人会做第二题吗?
							 
						
				6 楼
				
					
96131 [专家分:0]  发布于 2006-04-21 08:15:00				
				还是没人做,我就继续等待,期待中
							 
						
				7 楼
				
					
maxumi [专家分:2200]  发布于 2006-04-21 09:49:00				
				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 楼
				
					
96131 [专家分:0]  发布于 2006-04-21 10:53:00				
				感谢归感谢,就是看不懂,都怪自己太钝
							 
									
			
我来回复