木棍處理演算法
1. 把一根木棒鋸成6段要用10分鍾,如果要鋸成100段,需要多少分鍾
6段需要鋸5次,鋸一次需要10除5,就是兩分鍾,鋸成100段需99次,99乘以兩分鍾(鋸一次的時間)等於198分鍾,回答完畢。別忘了給分謝謝。
2. C++木材加工問題演算法,已知不同長度的N根圓木,現在讓你截成K根長度相等的圓木棍,問能截得最大長度
//這樣可以實現。輸入數值我就不寫了。
#include<iostream>
usingnamespacestd;
intmain(){
intn=10,k=5;
inta[10]={1,2,3,4,5,6,7,8,9,10};
//1.inputn,k
//2.inputa[n]各長度
//3.sorta
//4.
ints,m;
boolfound=false;
for(m=n-1;m>=0;m--){
s=0;
for(intj=n-1;j>=0;j--){
s+=a[j]/a[m];
if(s==k){
found=true;
break;
}
}
if(found)break;
}
cout<<"maxlength="<<m<<endl;
return0;
}
3. 打架的時候沒在現場,打完架抱著木棍進來了怎麼算
是給抓了還是事後調查找到你了,實話實說就是了,不要自找麻煩。
4. 有7根直徑都是10cm的圓柱形木棍,想用繩子把它們捆成一捆,最短需要多長的繩子
先6個圓柱圍成一圈,計算中間的圓的半徑,要判斷能不能放置下第七個圓,若六個圓的內接圓半徑大於等於5,則能放置,否者六個圓並不是相鄰的,即相鄰圓圓心與原點的夾角大於60度。
計算的圖中的內接圓半徑恰好是5,過程略。
然後計算外接圓的半徑是15
圖中所有的圓相切。
外接圓周長是30pai
5. 楊樹木棍如何處理
有以下幾種方式:
第一種就是繼續保留讓它發芽再生樹干;
第二種是把它的根莖全部挖掘起來不讓它再次重生,把它的樹根晾曬干可以生火起到第二次作用;
第三種是懶人法在它的根部,樹葉或砍伐面進行爛根的滅草劑使其徹底消除永不再生。
6. 長8米的木棍據成4段,每鋸一次需要4分鍾,共需要12分鍾。演算法公式是什麼
長8米的木棍鋸成4段,每鋸一次需要4分鍾,共需要12分鍾。
演算法公式是,
(4-1)*4
=3*4
=12(分鍾)
7. 新砍的棗木棍怎樣處理彎曲(新砍的棗木棍怎樣處理)
1、新砍的棗木棍處理視頻。
2、新砍棗木怎麼處理。
3、新砍的棗木棍現在去皮還是等乾巴了去皮。
4、棗木棍怎麼處理。
1.新砍的棗木棍可以在已經乾燥的木材上用鐵絲捆住端頭。
2.然後再使用防裂環、組合釘板等,用機械的方法強制木材不要膨脹和收縮,這樣子就可以避免木材發生開裂,可以更好的保存起來。
8. 演算法藝術與信息學競賽中小木棍的解析
很遺憾 雖然我手邊書架正好有這么一本書 但是我發覺水平實在有限 幫不了你啊 反正我就暈了 連程序1 程序2在哪我都看不出來 實在抱歉吶~!
____________________________________以上是原文————
接下來 我細細地想了一下 我的思路是這樣的
如果本題目不是求的最小可能長度 ,而是要求一個原長度的話 就好解決了 木棍本來就由長棍折成的 總和肯定匹配 因此 我最初的想法是直接使用2路歸並演算法 兩兩相鄰的相加
最後 我發現這個思路正好相反 對照書上的意思是
先取最長的小棍 然後與最短小棍組合
將迭代傳給第二長小棍 若其與剩下小棍長度之和與第一組相等 則繼續迭代
若不相等則返回上一步迭代
這就是作者所說的深度優先搜索吧 這樣確實能夠取得最小的長棍長度
_____________________以下是對解釋的補充—————————————
本來,像這種使用隊列來存儲的演算法 怎麼說都會認為是廣度優先演算法
地球人都知道
不過 這個題目並沒有說是將每一條棍子都砍成兩段,而是折成幾段
這就意味著 僅僅進行上面的 兩輪迭代是不夠的
當第一段最長的那段從隊列出來之後 也就是在兩段的層次上不能匹配的時候
它會入棧 進行更多段的匹配
而只有在外面套上這么一層的迭代 才真正是深度優先演算法
當然了,作者給的提示是 以最短小棍為起點 用長段來匹配 而我現在是以最長棍為起點 用短棍來匹配 是有點小小的不同 但我個人認為 過程是一樣的
這個問題 真可惡 害我晚上睡不好覺 睡了下 還得爬起來
9. 把1米長的木棒用去二分之一,還剩下多少米
二分之一就是0.5了
1-0.5=0.5
所以還有0.5米
演算法就是:1-(1*1/2)=0.5米
10. 小木棍問題,要求用數據結構與演算法處理
如果只是要輸出最小裝配時間的話,不需要什麼數據結構
其實演算法很簡單:記f(n)為裝配n個木棍需要的最小裝配時間
w[p], l[p]存儲需要裝配時間的序列中的最後一個木棍的weight、length(p=0 to n)
有f(1) = 1 (w[0], l[0])即第一根木棍的參數
f(2) = 1(存在一個木棍的weight和length都小於另一個) (w[0], l[0])為質量/長度大的那個
f(2) = 2(不存在) (w[0], l[0]), (w[1], l[1])
f(n) = f(n - 1) (存在i(0<=i<f(n)),使得第n根木棍的長度和質量同時大於或小於(w[i],l[i])
若大於,則(w[i], l[i]) = 第n根木棍的長度和質量
f(n) = f(n - 1) + 1 (不存在上述情況,且此時(w[f(n)], l[f(n)])=第n根木棍的長度和質量)
此演算法可以看成是遞推吧
代碼如下
#include <iostream>
using namespace std;
int getAns(int number, int *weight, int *length)
{
int answer = 1;
int i, j;
int *w = new int [number], *l = new int [number];
bool add_one_min = true;
w[0] = weight[0], l[0] = length[0];
for (i = 1; i < number; i++)
{
add_one_min = true;
for (j = 0; j < answer && add_one_min; j++)
{
if (w[j] > weight[i] && l[j] > length[i])
add_one_min = false;
if (w[j] <= weight[i] && l[j] <= weight[j])
{
w[j] = weight[i];
l[j] = weight[j];
add_one_min = false;
}
}
if (add_one_min)
{
w[answer] = weight[i];
l[answer] = length[i];
answer++;
}
}
delete []w;
delete []l;
return answer;
}
int main()
{
int number, weight[5000], length[5000];
int i;
cin >> number;
for (i = 0; i < number; i++)
cin >> weight[i] >> length[i];
cout << getAns(number, weight, length);
return 0;
}