讨论 / 把结果除以2就对了?
Fish、のTorres 2010-10-01 03:38:00
点我顶贴 收藏 删除
var s,xx,x1,x2,l,x,n,i,j,r:longint;

a,b:array[1..1000]of longint;

begin

readln(n);

for i:=1 to n do begin

read(a[i]);

x:=a[i];l:=0;

repeat

l:=l*10+x mod 7;

x:=x div 7;

until x=0;

b[i]:=l;

end;

for i:=1 to n-1 do begin

for j:=i+1 to n do begin

x1:=b[i];x2:=b[j];x:=0;xx:=1;

repeat

if x1 mod 10<>x2 mod 10 then x:=x+2*xx;

xx:=xx*2;

x1:=x1 div 10;x2:=x2 div 10;

until (x1=0) and (x2=0);

if abs(x-123)<abs(s-123) then s:=x;

end;

end;

write(s div 2);

end.

#1 Uchiha_Sasuke@2010-10-01 03:38:00
回复 删除
我的程序也这样 求解~~~~

const

er:array[1..16] of longint=(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768);

var

a:array[1..1000] of longint;

s:array[1..1000] of string;

ss,s1:string;

n,i,j,k,l,b,c,sum,ans,min:longint;

begin

readln(n);

ans:=maxlongint;

for i:=1 to n do

begin

read(a[i]);

s[i]:='';

while a[i]<>0 do

begin

j:=a[i] mod 7;

a[i]:=a[i] div 7;

str(j,ss);

s[i]:=ss+s[i];

end;

end;

for i:=1 to n-1 do

for j:=i+1 to n do

begin

if length(s[i])>length(s[j]) then

begin

for k:=length(s[j])+1 to length(s[i]) do

s[j]:='0'+s[j];

l:=k;

end

else

begin

for k:=length(s[i])+1 to length(s[j]) do

s[i]:='0'+s[i];

l:=k;

end;

s1:='';

for b:=1 to l do

if s[i][b]=s[j][b] then s1:=s1+'0' else s1:=s1+'1';

sum:=0;

for b:=1 to l do

begin

val(s1[b],c);

sum:=sum+c*er[l-b+1];

end;

if abs(sum-123)<ans then begin ans:=abs(sum-123); min:=sum; end;

end;

writeln(min);

end.

查看更多回复
提交回复