1樓:匿名使用者
一、isbn號碼
基礎字串處理題,心細一點的基本都能得滿分。
參考程式:
program isbn;
const
inp='isbn.in';
oup='isbn.out';
vari,j,k,ans:longint;
s:string;
ch:char;
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
begin
flink;
readln(s);// 輸入字串
j:=0;
i:=1;
ans:=0;
while j<9 do
begin
if s[i] in ['0'..'9'] then//如果是數字,那麼累加到ans中,共9個數字
begin
inc(j);
inc(ans,(ord(s[i])-ord('0'))*j);
end;
inc(i);
end;
ans:=ans mod 11;計算識別碼
if ans=10 then ch:='x' else ch:=chr(ord('0')+ans);//把識別碼轉換成字元,方便輸出
if s[length(s)]=ch
then write('right')
else write(copy(s,1,12)+ch);//輸出正確的識別碼
fclose;
end.
二、排座椅
用的是賽前集訓時提到的貪心,當時說某些題目用貪心可以得部分分,但是本題貪心可以得滿分的。
當然本題的貪心需要預處理下,開2個一維陣列,row[i]錄如果在第i行加通道,可以分割多少對調皮學生,col[i]記錄如果在第j列加通道,可以分割多少對調皮學生,最後貪心法輸出分割學生最多的前k行和前l列。
參考程式:
program seat;
const
inp='seat.in';
oup='seat.out';
varflag,m,n,k,l,d,i,j,x,y,x1,y1:longint;
tmp,col,row:array[1..1000] of longint;
s,s1:ansistring;
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
function min(a,b:longint):longint;
begin
if a
end;
procedure qsort(m,n:longint);//快排
vari,j,k,t:longint;
begin
i:=m; j:=n; k:=tmp[(i+j) shr 1];
repeat
while tmp[i]>k do inc(i);
while tmp[j]j;
if m0 then
begin
inc(j);
tmp[j]:=row[i];
end;
end;
qsort(1,j);//對tmp陣列排序
flag:=tmp[k];//flag為前k項的最小值
i:=1; j:=0;
while (i<=n) and (j=flag then //如果該行能分割的人數不少於flag,說明此處可以新增通道
begin
write(i);
inc(j);
if j<>k then write(' ');
end;
inc(i);
end;
writeln;
//下面是求列通道,思想同上
j:=0;
for i:= 1 to n do
begin
if col[i]>0 then
begin
inc(j);
tmp[j]:=col[i];
end;
end;
qsort(1,j);
flag:=tmp[l];
i:=1; j:=0;
while (i<=m) and (j=flag then
begin
write(i);
inc(j);
if j<>l then write(' ');
end;
inc(i);
end;
fclose;
end.
三、傳球遊戲
直接dp,似乎說遞推更確切點。
f(i,k)表示經過k次傳到編號為i的人手中的方案數。那麼可以推出下面的方程:
f(i,k)=f(i-1,k-1)+f(i+1,k-1) (i=1或n時,需單獨處理)
邊界條件:f(1,0)=1;
結果在f(1,m)中
參考程式:
program ball;
const
inp='ball.in';
oup='ball.out';
vari,j,k,n,m:longint;
f:array[0..30,0..30] of longint;
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
begin
flink;
readln(n,m);
fillchar(f,sizeof(f),0);
f[1,0]:=1;
for k:=1 to m do//注意此處2個迴圈的次序
begin
f[1,k]:=f[2,k-1]+f[n,k-1];
for i:= 2 to n-1 do
f[i,k]:=f[i-1,k-1]+f[i+1,k-1];
f[n,k]:=f[n-1,k-1]+f[1,k-1];
end;
write(f[1,m]);
fclose;
end.
四、立體圖
pku原題,編號2330
算不上難題,但是比較麻煩,細心點就ok了。
先計算好畫布的大小,再寫一個根據左下角座標繪製一個單位立方體的子程式。
然後遵循下面法則,不停繪製若干個立方體。(此處能體現出分割程式的偉大)
因為要不停的覆蓋,所以要遵循「視覺法則」:
1. 先繪里層再繪外層
2. 先繪底層再繪上層
3. 先回左邊再繪右邊
參考程式:
program drawing;
const
inp='drawing.in';
oup='drawing.out';
varm,n,i,j,k,x,y,h,tmp,maxx,maxy:longint;
map:array[1..1000,1..1000] of char;//畫布
a:array[1..50,1..50] of integer;//記錄輸入的矩陣
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
procedure print;//輸出畫布
vari,j:longint;
begin
for i:= 1 to maxx do
begin
for j:= 1 to maxy do
write(map[i,j]);
if i<>maxx then writeln;
end;
end;
procedure draw(x,y:longint);//在畫布(map陣列)上繪製左下角座標為(x,y)的一個單位立方體
begin
map[x,y]:='+';map[x,y+1]:='-'; map[x,y+2]:='-';map[x,y+3]:='-';map[x,y+4]:='+';
dec(x);
map[x,y]:='|';map[x,y+1]:=' '; map[x,y+2]:=' ';map[x,y+3]:=' ';map[x,y+4]:='|';
map[x,y+5]:='/';
dec(x);
map[x,y]:='|';map[x,y+1]:=' '; map[x,y+2]:=' ';map[x,y+3]:=' ';map[x,y+4]:='|';
map[x,y+5]:=' ';map[x,y+6]:='+';
dec(x);
map[x,y]:='+';map[x,y+1]:='-'; map[x,y+2]:='-';map[x,y+3]:='-';map[x,y+4]:='+';
map[x,y+5]:=' ';map[x,y+6]:='|';
dec(x); inc(y);
map[x,y]:='/';map[x,y+1]:=' '; map[x,y+2]:=' ';map[x,y+3]:=' ';map[x,y+4]:='/';
map[x,y+5]:='|';
dec(x);inc(y);
map[x,y]:='+';map[x,y+1]:='-'; begin
link;
for i:= 1 to 1000 do
for j:= 1 to 1000 do
map[i,j]:='.'; //初始化畫布
readln(m,n);
//計算畫布大小maxx * maxy
maxy:=n*4+1+m*2;
maxx:=0;
for i:= 1 to m do
begin
tmp:=0;
for j:= 1 to n do
begin
read(a[i,j]);
if a[i,j]>tmp then tmp:=a[i,j];
end;
tmp:=tmp*3+3+(m-i)*2;
if tmp >maxx then maxx:=tmp;
readln;
end;
//開始往畫布上繪圖
for i:= 1 to m do
for j:= 1 to n do
begin
x:=maxx-(m-i)*2;//第i層第j列最下方立方體左下角點的位置(x,y)
y:=(m-i)*2+(j-1)*4+1;
for k:= 1 to a[i,j] do
draw(x-(k-1)*3,y);//繪製每層的若干個一個單位立方體
end;
print;//輸出畫布
fclose;
end.
問一道2023年初中化學複賽題,問一道2023年初中化學複賽題
d吧,對比實驗只能有一個變數,使褪色後兩個滴管滴出多的那個維生素 c含量多,所以不用控制 在其它三個條件一樣的情況下,用少量果汁就使溶液褪色的說明vc多,其它幾個必須一樣,不一樣就不是對比實驗了.就這樣了,再說也說不清了 a b c d中的一個 ddddddddddddd 我做過的 而且我有答案 說...
2023年組裝電腦配置單,2023年組裝電腦配置單
配置 品牌 型號 數量 北京 cpu intel 奔騰 g620 盒 360主機板 精英h61h2 mv dvi 1 299記憶體 威剛1gb ddr3 1333 萬 53x2硬碟 wd 500gb 7200轉 16mb s 335顯示卡 盈通鐳龍r6670 1024gd5 499機箱 辛巴達大河馬...
2023年遊戲王上位卡組有那些,怎麼組
1 目前就是十二獸,還有十二獸的各種衍生卡組。2 比較穩定的就是星茲 毫無疑問的大佬 3 帝 去年六月的上位之一 目前來看可能比不過星茲 4 壞獸 相對不穩定,重點在於吃怪防不勝防,作為外掛也是相當優秀的 5 青眼 同帝 獄火機 現在可以作為外掛,額外基本只出提耶拉所以link不會影響 6 真龍說實...