500分紧急求助,望各位高手能拔刀相助(算法相关)

orinyangyang 2005-03-24 10:32:00
有一厚度为t1的纸条(纸条宽度不需考虑)围绕一厚度为t2、宽度为w(尺子长度不需考虑)的尺子进行卷绕,(即是以尺子为轴进行卷绕)。假设卷绕空隙(即两层之间的间隙)忽略不计。问:卷绕n圈需要纸条的长度是多少?

不知道我有没有把问题描述清楚。确实是一现实问题(急待解决),恳望各位高手能不吝赐教!谢谢先!!
...全文
206 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
orinyangyang 2005-03-26
  • 打赏
  • 举报
回复
很对不起了各位兄弟,特别是 jitian81411(太阳) 、 shine51151(美丽心情)等。
给分后结贴时系统出错了,给的分系统没有加上去:),望各位大侠见谅,小弟这
给诸位赔不是了。
TSD 2005-03-25
  • 打赏
  • 举报
回复
up
shine51151 2005-03-25
  • 打赏
  • 举报
回复
方法二、原始的计算方法,但容易编程通过迭代实现:

尺子的横截面为长方形,周长为 2 * (t2 + w),纸的厚度为 t1,那么

第一圈纸长度为 : L(1): 2 * (t2 + w)+ 8 * t1 ;(因为缠上一圈纸之后相当于在原来长方形周长的基础上在四个棱角处分别都多出了两段t1(纸的厚度)的长度,画一下图容易一眼就看出来)

第二圈纸长度为 : L(2): L1 + 8 * t1;

………………………………………………

第 n 圈纸长度为: L(n): L(n-1) + 8 * t1;

则纸的总周长L对这n圈的周长求和即得。

以上的步骤可以写个简单函数通过递归调用来实现。(这个楼主自己搞定肯定没问题)

显然序列{L(i)}是个公差d为 8 * t1 的等差数列,因此若手算直接用求和公式也行,

纸的总周长 L = (L(1) + L(n)) * n /2 = 2 * n * (t2+w) + 4 * t1 * n * (n+1)

########################################

这两种方法计算出的结果都是个近似值,我考虑这个近似值应该要比实际中所用纸的长度要略大些,
因为棱角处要是卷成弧线就会节省出一部分纸的长度,当然这个误差的大小和n的大小有直接关系,
卷的圈数n越大,误差也就要随之增大。

不知楼主看这样考虑行不行? 




shine51151 2005-03-25
  • 打赏
  • 举报
回复
有两种方法可供楼主参考:
方法一、结合上面的高手jitian81411(太阳)的建议,我们可以用计算体积来求解这个实际问题:

假设是长方体的尺子,设纸条的宽度为b,厚度为t1 ;尺子的厚度为t2,宽度为w,
则被包在纸条内的尺子的体积是 v1 = t2 * w * b;
(其中 t2 * w 为横截面面积,b为被纸条包住的尺子部分的高)

则包了n圈纸后总体积为 v2 =(t2 + 2 * n * t1)*(w + 2 * n * t1)*b;

因此纸条的长度L=(v2 - v1)/(b * t1)(其中 v2 - v1 为卷在尺上的纸条的总体积)
(相当于把卷着的纸条拉开展平了来看,也是个长方体,长就是为L,底面积为 b * t1 )
shine51151 2005-03-25
  • 打赏
  • 举报
回复
re : 楼主:“如果尺子的厚度很小的话,卷绕到最后,其截面应该是个椭圆吧。这样的话,算法是不是要改呢?”

我的看法:问题中尺子本身是个长方体,当它的厚度很小,或者纸有一定的韧性的话,在卷上纸的过程中棱角处会出现圆弧的现象。但是,现实中的类似这样的问题不可能得出个十分精确的结果。
要是你把它的某部分看成椭圆来考虑,那得出的结果有可能比看成长方体的误差还大,因为椭圆的周长公式 L≈π[1.5(a+b)-sqrt(ab)] 本身就是个利用无穷级数积分出的一个近似值。

既然两者都存在误差,而且你题目中要求" 假设卷绕空隙(即两层之间的间隙)忽略不计" ,那么把问题的模型归为长方体来求解既简化了计算又符合了题意,何必找个难求解的椭圆体来为难自己呢?
tfq 2005-03-25
  • 打赏
  • 举报
回复
纸条,尺子的长度已经说不考虑了,如何算的体积?
tfq 2005-03-25
  • 打赏
  • 举报
回复
n较小了近似成矩形,n较大时近似成椭圆,进行迭代
jitian81411 2005-03-25
  • 打赏
  • 举报
回复
程序自己去写
jitian81411 2005-03-25
  • 打赏
  • 举报
回复
假设是长方体的尺子,假设纸条的宽度为x,包在纸条内的尺子的体积是v1 = x*t2*w;
n圈的话总体积是v2 = x*(t2+2n)*(w+2n);
纸条的长度l=(v2 - v1)/(x*t1)
jitian81411 2005-03-25
  • 打赏
  • 举报
回复
用体积计算
orinyangyang 2005-03-25
  • 打赏
  • 举报
回复
想和zengwujun(月之海)兄讨论一下:
     卷第一圈是当然可以用上面说的公式,但是再往后面卷时,每一圈应该是个椭圆吧。那么这是还用2*t2+2*w2的公式计算每一圈的长度是不是就不太精确了呢?

各位高手请继续出招啊,高分等着您来拿呢!!!
zhousqy 2005-03-24
  • 打赏
  • 举报
回复
up
aime99 2005-03-24
  • 打赏
  • 举报
回复
递归算法
yjh1982 2005-03-24
  • 打赏
  • 举报
回复
每圈需要的厚度是前面那圈的直径
luohua_liushui 2005-03-24
  • 打赏
  • 举报
回复
把尺子的横截面看成长方形,周长为(t2+t2+w+w),由于纸有一定厚度,那么第一圈纸长度为
(t2+t2+w+w+4*t1)(选择纸厚度的中线计算长度,比较合理),第二圈纸长度为(t2+t2+w+w+4*t1+8*t1),第三圈纸长度为
(t2+t2+w+w+4*t1+8*t1+8*t1),第四圈纸长度为
(t2+t2+w+w+4*t1+8*t1+8*t1+8*t1),

.......
依次类推,相信应该可以做出来了。
zengwujun 2005-03-24
  • 打赏
  • 举报
回复
//把下面加上去算总长度
int sum=0;
for(int i=1;i<=n;++i)
sum += fun(t1,t2,w2,i);
printf("%d圈纸条总长度为%d\n",n,sum);
zengwujun 2005-03-24
  • 打赏
  • 举报
回复
#include "stdio.h"
//纸条厚度,尺子厚度,宽度,第几圈
int fun(int t1,int t2,int w2,int n)
{
if(n==1)return 2*t2+2*w2;
return fun(t1,t2+t1,w2+t1,n-1);
}

void main()
{
int t1,t2,w2,n;
printf("纸条厚:");
scanf("%d",&t1);
printf("尺子厚度和宽度:");
scanf("%d,%d",&t2,&w2);

printf("要求第几圈:");
scanf("%d",&n);
printf("第%d圈纸条长度为%d\n",n,fun(t1,t2,w2,n));
}
dongpy 2005-03-24
  • 打赏
  • 举报
回复
厚度为t2、宽度为w(尺子长度不需考虑)的尺子分成4面,记录每一面尺子的纸条层数,就可以算出当

前卷这一面时所需的纸条长度。
pcboyxhy 2005-03-24
  • 打赏
  • 举报
回复
体积不是可以算的吗?
体积除以截面面积不就是长度吗?
orinyangyang 2005-03-24
  • 打赏
  • 举报
回复
如果尺子的厚度很小的话,卷绕到最后,其截面应该是个椭圆吧。这样的话,算法是不是要改呢?
请高手们继续指教!!

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧