時間限制
記憶體限制
評測方式
題目**
1000ms
131072kib
標準比較器
local
noip2023年提高組第二題
給你n根火柴棍,你可以拼出多少個形如「a+b=c」的等式?等式中的a、b、c是用火柴棍拼出的整數(若該數非零,則最高位不能是0)。用火柴棍拼數字0-9的拼法如圖所示:
注意:1. 加號與等號各自需要兩根火柴棍
2. 如果a≠b,則a+b=c與b+a=c視為不同的等式(a、b、c>=0)
3. n根火柴棍必須全部用上
輸入檔案matches.in共一行,又乙個整數n(n<=24)。
輸出檔案matches.out共一行,表示能拼成的不同等式的數目。
【輸入輸出樣例1解釋】
2個等式為0+1=1和1+0=1。
【輸入輸出樣例2解釋】
9個等式為:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
輸入樣例 #1
輸出樣例 #1
【輸入樣例1】14【輸入樣例2】
18
【輸出樣例1】【問題描述】2【輸出樣例2】
9
給你n根火柴棍,你可以拼出多少個形如「a+b=c」的等式?等式中的a、b、c是用火柴棍拼出的整數(若該數非零,則最高位不能是0)。用火柴棍拼數字0-9的拼法如圖所示:
注意:1. 加號與等號各自需要兩根火柴棍
2. 如果a≠b,則a+b=c與b+a=c視為不同的等式(a、b、c>=0)
3. n根火柴棍必須全部用上
【輸入】
輸入檔案matches.in共一行,又乙個整數n(n<=24)。
【輸出】
輸出檔案matches.out共一行,表示能拼成的不同等式的數目。
【輸入輸出樣例1】
matches.in
matches.out
【輸入輸出樣例1解釋】
2個等式為0+1=1和1+0=1。
【輸入輸出樣例2】
matches.in
matches.out
解題報告
【問題簡述】給n根火柴棒,問能拼出多少種形如「a+b=c」的等式。
【題目型別】列舉或者搜尋
【解題分析】題目中給定n<=24,除去等號和加號要用的4個外還有20個火柴棒可以擺放。初始化讀入n時可以減去4,剩下就是兩個加數所需要的火柴棒數目。
procedure init;
begin
readln(n);
dec(n,4); {除掉『=』和『+』的4根火柴}
end;
和與加數中較大的乙個數字數相同或者大一。理想情況下11111和11111,可是另乙個加數為0也有6個火柴棒的花費,4個「1」的情況也不可能,所以和列舉到「1111」就可以了。(事實證明也是如此的,因為1比其他字母少用很多火柴),時間效率已經完全可以承受了。
具體操作時,先列舉和,在列舉其中乙個加數,另乙個加數可以用和減去列舉的加數得到。
for i:=0 to 1111 do //列舉和
for j:=0 to i do //列舉加數
begin
k:=i-j; //相減得到另乙個加數
if a[i]+a[j]+a[k]=n then inc(ans); //火柴數和為n則計數器加一
end;
每個數的花費火柴數是可以預處理得到的。
for i:=0 to 9 do
a[i]:=c[i];
for i:=10 to 1111 do
a[i]:= a[i div 10] +a[i mod 10]; //預處理每個數所需要的火柴數
陣列aa[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
a[9]
數字所需火柴數
如數字12需要的火柴數為:
a[12]= a[12 div 10]+ a[12 mod 10]
=a[1]+a[2]
=2+5
=7【輸入輸出樣例2解釋】
9個等式為:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11
另一種思路:
一道很水的水題,只需暴力列舉,但是還是有些東西需要注意:
①有位仁兄他只列舉了10×10,(因為他以為只有0~9),實際上,需要列舉很多很多,比如1111+1=1112是四位數裡
最小的,但需要25根,剛剛好大於了n的資料範圍,所以只需要列舉三位數×三位數就可以了。
②這是我的錯誤了,我用while(k>0)這個來求k所需的棒棒個數,但是,如果k=0時,值應該為6,而我的**會直接跳過,結果變成了0,所以我就錯了55555~/(ㄒoㄒ)/
#include#include#include#include#include#include#include#include#includeusing namespace std;
int n,num[1235]=,d;
int cut(int i)
int main()
printf("%d",d);
}
大牛:列舉a,b驗證
#include#include#include#include#includeusing namespace std;
int n,ans;
int cnt[10]=;
int get(int x)
return tot;
}int main()
1012 數字分類 20
給定一系列正整數,請按要求對數字進行分類,並輸出以下5個數字 思路 1.由於涉及到每個型別的個數級順序,用陣列 count 5 儲存每個型別個數 2.每個型別結果,或者預處理用陣列 ans 5 儲存 3.涉及到最後沒有空格而中間有的情況 include include using namespace...
JoyOI1008 NOIP2008傳球遊戲
時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local noip2008複賽普及組第三題 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子...
1012 數字分類 20分
題目位址 1.需要了解知識 標頭檔案 include vector int a 5 構建乙個自動變長的二維陣列 a num 5 push back num 在表尾新增元素 a i size 陣列長度printf nf num n為幾,則為小數點後幾位 include include using na...