每天一道C语言编程:Cylinder(圆柱体问题)

题目描述

使用一张纸和剪刀,您可以通过以下方式切出两个面形成一个圆柱体:
水平切割纸张(平行于较短的边)以获得两个矩形部分。
从第一部分开始,切出一个最大半径的圆。圆圈将形成圆柱体的底部。
将第二部分向上滚动,使其周长与圆的周长相等,并将滚动的一端连接到圆上。请注意,卷筒可能有一些重叠的部分,以获得所需的周长长度。


给定纸张的尺寸,您能否计算出可以使用上述程序构建的圆柱体的最大可能体积?

输入格式

输入由多个测试用例组成。每个测试用例由两个数字 w 和 h (1 ≤ w ≤ h ≤ 100)组成,它们表示纸张的宽度和高度。

最后一个测试用例后跟一行包含两个零。

输出格式

对于每个测试用例,打印一行具有最大可能体积的圆柱体。将此数字四舍五入到小数点后 3 位。

样例输入

10 10
10 50
10 30
0 0

样例输出

54.247
785.398
412.095

解题思路

根据题意可得对纸张的裁剪如下图所示

注:只是帮助理解,图不一定正确,第一部分裁剪圆,第二部分向上卷,将一端与圆拼接

 

刚开始可能会像,第一部分划为正方形,利用率最高:

但是这样的话:2r>=2Πr,才能实现拼接,但是2r>=2Πr显然不成立,所以这样的想法是不正确的

不能投机取巧,只能从公式入手

V(圆柱体)= Πr^{2} \times h,从公式可以看出,要使r与h尽量大,r受到宽度的影响,所以先考虑h,要使h尽量大,那么只有

容易得到

2\Pi r<=w

r<=w\div 2\Pi

取最大:r=w\div 2\Pi

V(圆柱体)=\Pi\times(w\div 2\Pi )^{2}\times(h-2(w\div 2\Pi ))

以上是w作圆周长的情况,不能忽略h-2r作圆周长的情况,即

2\Pi r<=h-2r

r<=h\div (2\Pi +2)

取最大:r=h\div (2\Pi +2)

V(圆柱体)=\Pi \times (h\div (2\Pi +2))^{2}\times w

到这里代码可写为

#include<stdio.h>
#include<math.h>#define PI acos(-1)//定义PI为3.1415926535898
int main()
{double w,h;while(scanf("%lf %lf",&w,&h)&& w!=0 && h!=0){double volumeone,volumetwo;double rone=w/(2*PI);volumeone=PI*pow(rone,2)*(h-2*rone);double rtwo=h/(2*PI+2);volumetwo=PI*pow(rtwo,2)*w;printf("%.3lf\n",volumeone>volumetwo?volumeone:volumetwo);}return 0;
}

但是可以看到运行结果是错误的,因为上述r都是由周长限制的,即

volumetwo:2\Pi r<=h-2r;但是也要同时满足2r<=w,如果2r>w,那么r=w/2

可以这么理解,按照我们的图来讲

第一限制条件:2r<=w

第二限制条件:2\Pi r<=h-2r

不满足第一限制条件,只考虑第二限制条件就会引起判断错误

而volomeone:2\Pi r<=w,本来就满足2r<=w,所以不需要写判断

所以volumetwo要加入判断

double rtwo=h/(2*PI+2)>w/2 ? w/2 : h/(2*PI+2);

最终代码为

#include<stdio.h>
#include<math.h>#define PI acos(-1)//定义PI为3.1415926535898
int main()
{double w,h;while(scanf("%lf %lf",&w,&h)&& w!=0 && h!=0){double volumeone,volumetwo;double rone=w/(2*PI);volumeone=PI*pow(rone,2)*(h-2*rone);double rtwo=h/(2*PI+2)>w/2 ? w/2 : h/(2*PI+2);volumetwo=PI*pow(rtwo,2)*w;printf("%.3lf\n",volumeone>volumetwo?volumeone:volumetwo);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Amazon 上以高可用性模式实现 Microsoft SQL 数据库服务现代化的注意事项

许多企业都有需要 Microsoft SQL Server 来运行关系数据库工作负载的应用程序&#xff1a;一些应用程序可能是专有软件&#xff0c;供应商可使用它强制 Microsoft SQL Server 运行数据库服务&#xff1b;其他应用程序可能是长期存在的、自主开发的应用程序&#xff0c;它们在最…

我们如何在 Elasticsearch 8.6、8.7 和 8.8 中加速数据摄入

作者&#xff1a;Adrien Grand, Joe Gallo, Tyler Perkins 正如你们中的一些人已经注意到的&#xff0c;Elasticsearch 8.6、8.7 和 8.8 在各种数据集上带来了良好的索引加速&#xff0c;从简单的关键字到繁重的 KNN 向量&#xff0c;以及摄取管道繁重的摄取工作负载。 摄取涉及…

跳跃表SkipList(简单的C++实现)

不懂跳跃表的请直接百度 直接上实现 #include <iostream> #include <string.h> #include <ctime>using namespace std;template<typename T> struct SkipNode {inline static constexpr int Rate3;inline static constexpr int MaxHeight8;inline sta…

2023版7月软件测试面试题(800道)【附带答案】持续更新...

又到了立flag的时候&#xff0c;你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#xff0c;人手一…

批量添加:vue+easyexcel 上传excel文件解析为Java对象并保存到数据库

对于像数据库中批量添加数据&#xff0c;我们一般会选择通过Excel文件先按照固定的格式将数据保存&#xff0c;然后再通过系统上传进而保存到数据库中。 阿里的excel解析工具EasyExcel和Apach的POI都能进行Excel文件的解析&#xff0c;但是EasyExcel操作起来要相对更简单一些&…

cancal报错 config dir not found

替换classpath中间封号两边的值

1186. 删除一次得到子数组最大和;1711. 大餐计数;1834. 单线程 CPU

1186. 删除一次得到子数组最大和 解题思路&#xff1a;如果没做过还不是很好想&#xff0c;当时自己第一反应是双指针&#xff0c;结果是个动态规划的题。 核心就是dp的定义&#xff0c;dp[i][k]表示以arr[i]结尾删除k次的最大和。看到这里其实就有一点思路了 dp[i][0]表示以…

K8S pod 均匀调度分配 —— 筑梦之路

pod调度简介 在 k8s 中 通过 kube-scheduler 组件来实现 pod 的调度&#xff0c;所谓调度&#xff0c;即把需要创建的 pod 放到 合适的 node 上&#xff0c;大概流程为&#xff0c;通过对应的 调度算法 和 调度策略&#xff0c;为待调度的 pod 列表中的 pod 选择一个最合适的 N…

JVM理论(五)执行引擎--解释器/JIT编译器

概述 首先执行引擎是java虚拟机核心的组成部分之一;而JVM的主要任务是装载字节码到内存,但不能够直接运行在操作系统之上.因为字节码指令并非等价于本地机器指令,它仅仅包含能够被JVM所识别的指令、符号表、以及其他信息;而此时执行引擎就华丽登场,它的任务就是将字节码指令解…

rust学习-泛型和trait

泛型 Option&#xff0c;Vec&#xff0c;HashMap<K, V>&#xff0c;Result<T, E>等&#xff0c;取函数以减少代码重复的机制 背景 两个函数&#xff0c;不同点只是名称和签名类型 fn largest_i32(list: &[i32]) -> i32 {let mut largest list[0];for &…

【python】动态规划:牛客网HJ24 合唱队

描述 N 位同学站成一排&#xff0c;音乐老师要请最少的同学出列&#xff0c;使得剩下的 K 位同学排成合唱队形。 设KK位同学从左到右依次编号为 1&#xff0c;2…&#xff0c;K &#xff0c;他们的身高分别为T1,T2,…,TKT1​,T2​,…,TK​ &#xff0c;若存在i(1≤i≤K)i(1≤i…

【数字IC前端笔试真题精刷(2021)】大疆——数字芯片开发工程师A/B卷

声明:本专栏所收集的数字IC笔试题目均来源于互联网,仅供学习交流使用。如有侵犯您的知识产权,请及时与博主联系,博主将会立即删除相关内容。 笔试时间:2021年A/B卷 题目类型:(只列了选择题) 大疆芯片开发岗A卷 文章目录 一、单选题 / 多选题1.(单选)关于流水线设计的…

C++并发编程(6):单例模式、once_flag与call_once、call_once实现单例

单例模式 参考博客 【C】单例模式&#xff08;饿汉模式、懒汉模式&#xff09; C单例模式总结与剖析 饿汉单例模式 C实现 C单例模式(饿汉式) 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结 &#xff0c;一共…

行为型模式 - 策略模式

概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进行开发&…

Web 3.0时代,重塑教育与学习方式的可能性

随着科技的快速发展和互联网的普及&#xff0c;教育领域也面临着巨大的机遇和挑战。Web 3.0时代的到来为教育与学习方式带来了全新的可能性。在这个数字化时代&#xff0c;我们可以探索和利用Web 3.0技术&#xff0c;重塑教育的方式&#xff0c;提供更个性化、互动性和灵活性的…

在Illustrator中创建 3D 冰淇淋模型对象

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 一旦你学会了如何在Illustrator中制作一个对象3D&#xff0c;你可以前往Envato Elements&#xff0c;在那里你可以找到大量的3D设计来激发你的灵感。这个基于订阅的市场拥有超过 2&#xff0c;000 个 Illus…

php实现站群软件权限管理功能示例

1.管理员页面RBAC.php <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>权限管理</title> <script src"bootstrap/js/jquery-1.11.2.min.js"></script> </head>…

项目名称:智能家居边缘网关项目

一&#xff0c;项目介绍 软件环境: C语言 硬件环境: STM32G030C8TX单片机开发板 开发工具: Linux平台GCC交叉编译环境以及ukeil (1)边缘网关概念 边缘网关是部署在网络边缘侧的网关&#xff0c;通过网络联接、协议转换等功能联接物理和数字世界&#xff0c;提供轻量化的联接管…

通过new FormData提交简单数据

通过new FormData提交简单数据 效果示例图代码 效果示例图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style type"text/css">* {padding: 0px;margin: 0px;box-sizing: border-…

SpringBoot整合PostgreSQL教程

主要描述如何优雅的整合postgresql。本文略去如何安装pgsql的过程&#xff0c;详情可参考其他文章。 文章目录 postgresql简介整合postgresql整合mybatis整合mybatis-plus postgresql简介 与mysql一样也是开源的关系型数据库&#xff0c;同时还支持NoSql的文档型存储。在某些方…