杭電oj編碼2021

2021-07-23 20:21:29 字數 1703 閱讀 2033

題目描述:

作為杭電的老師,最盼望的日子就是每月的8號了,因為這一天是發工資的日子,養家餬口就靠它了,呵呵

但是對於學校財務處的工作人員來說,這一天則是很忙碌的一天,財務處的小胡老師最近就在考慮乙個問題:如果每個老師的工資額都知道,最少需要準備多少張人民幣,才能在給每位老師發工資的時候都不用老師找零呢?

這裡假設老師的工資都是正整數,單位元,人民幣一共有100元、50元、10元、5元、2元和1元六種。

輸入:輸入資料報含多個測試例項,每個測試例項的第一行是乙個整數n(n<100),表示老師的人數,然後是n個老師的工資。

n=0表示輸入的結束,不做處理。

輸出:對於每個測試例項輸出乙個整數x,表示至少需要準備的人民幣張數。每個輸出佔一行。

樣例輸入:3

1 2 3 0

樣例輸出:

4分析:

這題剛拿到時,我看了一下,頭就大了,不知道怎麼去做。

1、但是靜下心來,慢慢考慮了一下,就發現了:輸出的要求很低,只要輸出共需要多少張rmb,所以,在程式中只需要記錄數量就可以了。

2、因為是記錄100元,50元,10元,5元,2元,1元的rmb共需要多少張,所以就必須要使用「/」,「%」這兩個符號。

3、因為在每次輸入時對每個數進行處理更加簡單,總共只需要兩層迴圈就可以輸出結果了。

這樣,大體框架就出來了。

**及優化過程:

方法一:

#includeusing std::cin;

using std::cout;

using std::endl;

int main()

if (number < 100 && number >= 50)//因為是順序執行,所以「number < 10 && 」這一段可以省略。當50 < number < 100時

if (number < 50 && number >= 10)

if (number < 10 && number >= 5)

if (number < 5 && number >= 2)

count += number;//此時,number只能是「0」或「1」

} cout << count << endl;//輸出本組共計需要多少張rmb

} return 0;

}

本次**的執行結果:

在oj上看了2021題的提交記錄之後發現,**很長。所以在下方進行一些小小的優化。因為方法一已經將總體思想講解得較為清晰,所以在方法二和方法三中只對變更的地方做解釋。

方法二:

#includeusing std::cin;

using std::cout;

using std::endl;

int main()

cout << count << endl;

} return 0;

}

本次**的執行結果:

方法三:

#include#includeint main()

printf("%d\n", count);

} return 0;

}

本次**的執行結果:

可以發現紅圈中的三項都已經降下來了。而且,使用c語言中的輸入輸出要比c++中的輸入輸出要更好。

網上還有兩種主流的的解決方法,在此不做解釋,了解一中解決方法,可以幫助理解其他的解決方法。

杭電oj編碼2014

問題描述 青年歌手大獎賽中,評委會給參賽選手打分。選手得分規則為去掉乙個最高分和乙個最低分,然後計算平均得分,請程式設計輸出某選手的得分。輸入 輸入資料有多組,每組佔一行,每行的第乙個數是n 2 輸出 對於每組輸入資料,輸出選手的得分,結果保留2位小數,每組輸出佔一行。樣例輸入 3 99 98 97...

杭電oj編碼2015

題目描述 有乙個長度為n n 100 的數列,該數列定義為從2開始的遞增有序偶數,現在要求你按照順序每m個數求出乙個平均值,如果最後不足m個,則以實際數量求平均值。程式設計輸出該平均值序列。輸入 輸入資料有多組,每組佔一行,包含兩個正整數n和m,n和m的含義如上所述。輸出 對於每組輸入資料,輸出乙個...

杭電oj編碼2018

問題描述 有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛?輸入 輸入資料由多個測試例項組成,每個測試例項佔一行,包括乙個整數n 0 n 0表示輸入資料的結束,不做處理。輸出 對於每個測試例項,輸出在第n年的時候母牛...