前言:本人使用php編程語言編寫
一: 小度幫同事買飲料,每個同事都會告訴小度要喝什麼類型的飲料,店家正好做買一送一活動,每買一瓶任意類型飲料可以贈送同類型飲料一瓶,請問小度至少需要買幾瓶飲料。
1.第一行輸入兩值:a,b。(a代表同事人數,且a>=0。b代表商店一共有多少種類型飲料,0<=b<=1000)(具體限制記不太清,不影響結果)
2.第二行輸入a個值,代表每個同事想要喝的飲料類型。
例:(具體例子記不清,隨便給個)
輸入:
5 3
1 2 2 1 2
輸出:
3
<?php
// 買飲料。
while (fscanf(STDIN, "%d%d", $a, $b) == 2) {
fscanf(STDIN, "%[^\n]s", $line);
//split line to array
$numbers = explode(" ", trim($line));
if(count($numbers) == $a && max($numbers) <= $b){
//將結果數組按值分類計數
$numbers = array_count_values($numbers);
$re = 0;
foreach ($numbers as $number){
//取進位整數
$re += ceil($number / 2.0);
}
printf("%d\n",$re);
}
}
二:小度所在的隊伍執行任務,路上遇到三岔路口。軍官有過吩咐,遇到三叉路口如果隊伍可以分成兩隊,且兩隊人數差是b人,則分成兩隊向不同的路口繼續走,若隊伍無法按要求分成兩隊,則在此地紮營,問隊伍一共紮了幾處營地。
1.第一行輸入a,b兩個值,a代表隊伍總人數,b代表分隊的人數差。
例:
輸入:
10 2
輸出:
5
說明: 10
/ \
4 6
/ \ / \
1 3 2 4
/ \
1 3
<?php
// 三岔路口擺地攤。
while (fscanf(STDIN, "%d%d", $a, $b) == 2) {
$re = test($a,$b,0);
printf("%d\n",$re);
}
function test($a,$b,$c){
$re = 0;
//如果隊伍人數少餘(差值+1),直接紮營
if($a <= $b+1){
return $c+1;
}
//如果隊伍人數減去差值可以被2整除(即可以分成兩隊)就分隊
if(($a-$b)%2 == 0){
//遞歸紮營
$re += test(($a-$b)/2,$b,$c);
$re += test(($a-$b)/2+$b,$b,$c);
return $re;
}else{
return $c+1;
}
}
三:小度擺放火柴 1-9 九個數字,1 2 3 4 5 6 7 8 9 分別需要使用 2 5 5 4 5 6 3 7 6根火柴,給小度n根火柴,小度能擺出的最大數字是多少(火柴需全部使用完)
1.第一行輸入a,b兩個值,a代表給小度的火柴總數,b代表小度可以擺放的數字個數。
2.第二行輸入b個值,代表小度可以擺放的數字。
例:
輸入:
20 4
3 4 7 8
輸出:
777773
沒寫出來,尬
結語:經過這次筆試測試,也是發現了自己很多不足。小題很多是關於數據結構的樹、圖那些,很可惜好久沒複習忘得差不多了。大題最後一個沒寫出來也是有點遺憾。再接再厲吧。
如果你看到了並知道最後一題答案,也歡迎留言。
(題目均根據記憶寫出來,如跟原題目有小差誤也請諒解。任何問題可以留言。)