主题:关于数组和埃及分数的题目向大家请教
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
感谢归感谢,就是看不懂,都怪自己太钝
我来回复