題解 洛谷1618 三連擊(公升

2021-07-09 22:47:57 字數 1713 閱讀 9982

將1,2,…,9共9個數分成三組,分別組成三個三位數,且使這三個三位數的比例是a:b:c,試求出所有滿足條件的三個三位數,若無解,輸出「no!!!」。 

//感謝黃小u飲品完善題意輸入格式:三個數,a b c。

輸出格式:若干行,每行3個數字。按照每行第乙個數字公升序排列。

輸入樣例#1:

1 2 3
輸出樣例#1:

192 384 576

219 438 657

273 546 819

327 654 981

保證a

默默打表,多重判斷,因為資料就這麼弱

var a,b,c,i,j,k,t:longint;

n:array[0..100000]of longint;

f:array[1..9]of boolean;

p:boolean;

function exi(a,b,c:longint):boolean;

var i:longint;s1,s2,s3:string;

begin

str(a,s1);

str(b,s2);

str(c,s3);

for i:=1 to 3 do

begin

if pos(s1[i],s2)>0 then exit(false);

if pos(s2[i],s1)>0 then exit(false);

if pos(s1[i],s3)>0 then exit(false);

if pos(s3[i],s1)>0 then exit(false);

if pos(s2[i],s3)>0 then exit(false);

if pos(s3[i],s2)>0 then exit(false);

end;

exi:=true;

end;

begin

fillchar(f,sizeof(f),true);

p:=false;

for i:=1 to 9 do

begin

f[i]:=false;

for j:=1 to 9 do

if f[j] then

begin

f[j]:=false;

for k:=1 to 9 do

if f[k] then

begin

inc(t);

n[t]:=i*100+j*10+k;

end;

f[j]:=true;

end;

f[i]:=true;

end;

readln(a,b,c);

for i:=1 to t-2 do

for j:=i+1 to t-1 do

for k:=i+2 to t do

if (a*n[j]=b*n[i])and(a*n[k]=c*n[i])and(b*n[k]=c*n[j])and exi(n[i],n[j],n[k])

then

begin

p:=true;

writeln(n[i],' ',n[j],' ',n[k]);

end;

if not(p) then

writeln('no!!!');

end.

洛谷 三連擊問題

以下 來自洛谷題解。然後我加了一點自己理解的解釋。沒有別的意思,只是想把我覺得好的 記下來 本題為提交答案題,您可以寫程式或手算在本機上算出答案後,直接提交答案文字,也可提交答案生成程式。將1,2,91,2,cdots 91,2,9共999個數分成333組,分別組成333個三位數,且使這333個三位...

洛谷Luogu P1008 三連擊題解

題目描述 將1,2,9共9個數分成3組,分別組成3個三位數,且使這3個三位數構成1 2 3的比例,試求出所有滿足條件的3個三位數。輸出格式 若干行,每行333個數字。按照每行第111個數字公升序排列。解題思路 看到網上有很多的解法,這題本身也沒有什麼技術含量,大多用暴力迴圈或者深搜就行,甚至直接打表...

洛谷 P1618 三連擊(公升級版)

題目描述 將1,2,9共9個數分成三組,分別組成三個三位數,且使這三個三位數的比例是a b c,試求出所有滿足條件的三個三位數,若無解,輸出 no 輸入輸出格式 輸入格式 三個數,a b c。輸出格式 若干行,每行3個數字。按照每行第乙個數字公升序排列。輸入輸出樣例 輸入樣例 1 1 2 3 輸出樣...