木棍处理算法
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;
}