題目:笨笨熊搬家打包篇
森林裡的笨笨熊今天可開心啦——他買了新房子,喬遷新喜要搬家了。
因此,笨笨熊請了許多好朋友來幫忙搬家,並準備了很多小紙盒用來裝需要搬的物品,
不過,這些紙盒的容積都是相同的,並且最多只能裝兩個物品。
但是,為了不打擾太多的朋友,笨笨熊想了個「聰明」辦法:讓每個紙盒使用效率最高
(注:只要紙盒容積大於物品的體積之和就認為可以裝下;物品體積不會大於紙盒容積),
這樣需要的紙盒最少。為了幫助笨笨熊提前通知朋友,請你根據笨笨熊的辦法,
幫忙算出:需要紙盒的最少數目是多少?
輸入:v:
整數v——紙盒的容積;
整數n:
物品的總數目n;
陣列objects:
共n個整數(對應n個物品的體積,每個整數用空格隔開)。
輸出: 整數m——需要紙盒的最少數目;
樣例輸入:
10 2
2 3
樣例輸出: 1
思路1:排序,最大者加上可加的次大者
#include "stdafx.h"
#include "iostream"
using namespace std;
int leastbox(int v, int n, int * objects)
if (n < 2)
int box = 0;
// 插入排序
if (objects[0] < objects[1])
for (int i = 2; i < n; i++)
else
}} // 體積最大者加上某一體積物體,該物體體積是滿足兩物相加體積不超過v的最大值
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (objects[i] + objects[j] <= v)
}if (objects[i] != 0)
}return box;
}int _tmain(int argc, _tchar* argv)
cout << "最少的盒子數目為:" << leastbox(v, n, objects) << endl;
delete objects;
system("pause");
return 0;
}
思路2:排序,最大者加上最小者
#include "stdafx.h"
#include "iostream"
using namespace std;
int leastbox(int v, int n, int * objects)
if (n < 2)
int box = 0;
// 插入排序
if (objects[0] < objects[1])
for (int i = 2; i < n; i++)
else
}} // 最大者加上最小者
int i = 0;
int j = n - 1;
while (i < j)
else
}return box;
}int _tmain(int argc, _tchar* argv)
cout << "最少的盒子數目為:" << leastbox(v, n, objects) << endl;
delete objects;
system("pause");
return 0;
}
兩個思路我稍想了一下應該都是對的,沒有想出嚴格的數學依據,也沒有找出反例,求指點。
2014華為程式設計大賽題目 小明的筷子
題目 小明的筷子 小明是個馬大哈,某天他到超市買了若干雙筷子 n 小於 20 筷子的長度不盡相同,他把全部筷子都放在購物袋裡面拿回家,路上不小心漏了一根 請你用程式幫他找出漏掉的筷子是多長的。輸入 引數一 剩下的筷子的長度值的陣列,例如 1,2,3,2,1,3,2,筷子的長度必然大於0,不需要校驗 ...
華為2012程式設計大賽題目(1)
現有一串字串,請找出其中的大寫字母並順序儲存至output陣列中。注 字母可能包含大寫 小寫字母 數字以及控制字元 要求實現函式my string char input,char output 例子 input 3dfd93dafkifikdldkjlkd output difildlkd 題目是從...
2023年華為程式設計大賽題目
include include includeint findstat const char map,unsigned int iarrn,unsigned int ipathlen if map i x locationx i std queuemyqueue visited locationx ...