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

news2024/11/25 16:26:33

题目描述

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


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

输入格式

输入由多个测试用例组成。每个测试用例由两个数字 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.coloradmin.cn/o/771637.html

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

相关文章

2023网络安全面试题汇总(附答题解析+配套资料)

随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;相应的想要进入到网络安全行业的人也越来越多&#xff0c;为了更好地进行工作&#xff0c;除了学好网络安全知识外&#xff0c;还要应对企业的面试。 所以在这里我归总了一些网络安全方面的常见面…

牛顿修正法在二阶近似方法中的应用

使用optimtool的牛顿修正法来应用学习 pip install optimtool --upgrade pip install optimtool>2.4.2optimtool包所依据的理论支撑中&#xff0c;还没有为二阶微分方法作邻近算子的近似与修正&#xff0c;所以二阶近似方法是研究无不可微项的可微函数的算子。 牛顿修正法…

docker部署mysql8主从集群(互为主从),keepalived保证高可用

一、准备2台物理机器master-1、master-2&#xff0c;目标虚拟VIP。   VIP:172.50.2.139   master-1:172.50.2.41   master-2:172.50.2.42 二、然后分别在2台物理机器master-1、master-2上使用docker-compose安装mysql8&#xff0c;并配置互为主从。1&#xff09;配置mas…

2023-7-19-第二十式迭代器模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

深入理解Java虚拟机(五)虚拟机类加载机制

代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步。 一、概述 Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Jav…

队列的表示和操作

队列&#xff1a;队列是仅在表尾进行插入操作&#xff0c;在表头进行删除操作的线性表。 表尾即an端&#xff0c;称为队尾&#xff0c;表头即a1端&#xff0c;称为队头。 队列的存储方式&#xff1a;顺序队列和链式队列 队列顺序表示 #define MAXQSIZE 100 //最大队列长度 …

Vue 1 - 安装、快速上手

文章目录 关于 Vue创建应用 关于 Vue 官网&#xff1a; https://cn.vuejs.org官方文档-快速上手&#xff1a; https://cn.vuejs.org/guide/quick-start.htmlgithub : https://github.com/vuejsVue SFC Playground : https://play.vuejs.org/ 其他 作者 尤雨溪 Evan You 主页 …

如何把caj文件改成PDF格式?分享三个免费的方法!

在学术研究中&#xff0c;我们可能会遇到CAJ文件&#xff0c;这是一种在中国学术界广泛使用的文档格式。然而&#xff0c;与PDF文件相比&#xff0c;CAJ文件的查看和分享并不那么便捷。下面&#xff0c;我会为你介绍三种免费且简便的方法&#xff0c;帮助你将CAJ文件转化为PDF格…

PSP - Jackhmmer 搜索 EMBL 序列数据库的相似序列

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131817060 EMBL (European Molecular Biology Laboratory&#xff0c;欧洲分子生物实验室)&#xff1a;EMBL 数据库是一个由欧洲生物信息学研究所…

Microsoft Outlook如何定时发送邮件

点击New Emai 选择Options→Delay Delivery→Do not deliver before→Close

基于linux下的高并发服务器开发(第二章)- 2.13 匿名管道通信案例

实现 ps aux | grep xxx 父子进程间通信 子进程&#xff1a; ps aux, 子进程结束后&#xff0c;将数据发送给父进程 父进程&#xff1a;获取到数据&#xff0c;过滤 pipe() execlp() 子进程将标准输出 stdout_fileno 重定向到管道的写端。 dup2 07 / 匿名管道…

java项目之班级同学录网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的班级同学录网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

强化学习之DQN(deep Q-network)算法

一、简介 DQN算法是深度学习领域首次广泛应用于强化学习的算法模型之一。它于2013年由DeepMind公司的研究团队提出&#xff0c;通过将深度神经网络与经典的强化学习算法Q-learning结合&#xff0c;实现了对高维、连续状态空间的处理&#xff0c;具备了学习与规划的能力。 二、…

使用Pandas计算两个系统客户名称的相似度

引言&#xff1a; 在日常业务处理中&#xff0c;我们经常会面临将不同系统中的数据进行匹配和比对的情况。特别是在涉及到客户管理的领域&#xff0c;我们需要确保两个系统中的客户记录是准确、一致和无重复的。 本文将介绍如何使用Python的Pandas库来处理这个问题。我们将以…

Linux: cannot read file data

报错&#xff1a; Could not load library libcudnn_cnn_infer.so.8. Error: /home/qc/miniconda3/envs/DNAqc/lib/python3.10/site-packages/torch/lib/libcudnn_cnn_infer.so.8: cannot read file data Please make sure libcudnn_cnn_infer.so.8 is in your library path! A…

淘宝商品详情数据接口(APP端,H5端),监控淘宝商品历史价格及价格走势,接口代码对接

淘宝商品详情数据接口APP端&#xff0c;H5端代码如下&#xff1a; 公共参数 名称类型必须描述交流中心18179014480keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;注册Key和secret接入secretString是调用密钥api_nameString是API接口名称&#xff08;包括…

JMeter做http接口功能测试

1. 普通的以key-value传参的get请求 e.g. 获取用户信息 添加http请求&#xff1b;填写服务器域名或IP&#xff1b;方法选GET&#xff1b;填写路径&#xff1b;添加参数&#xff1b;运行并查看结果。 2. 以Json串传参的post请求 e.g. 获取用户余额 添加http请求&#xff1b;…

行业数据和报告到底应该如何去找?

信息时代&#xff0c;经常要对行业信息进行分析。这时首先就是要进行信息收集和筛选&#xff0c;如果我们懂得构建自己的工作工具和数据来源&#xff0c;效率会蹭蹭往上涨。 找行业报告、了解行业趋势&#xff0c;提高效率。 1. 国家权威 国家统计局&#xff1a;这个网站覆盖…

C++无锁编程——无锁队列(queue)

C无锁编程——无锁队列(queue) 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——栈的几种无锁实现方法。队列的挑战与栈的有些不同&#xff0c;因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的&#xff0…

CRC校验原理全面解读

目录 1. 简介2. 原理2.1 CRC的发送与接收2.2 CRC校验码的生成2.3 CRC校验码的校验 3. 拓展问题3.1 模2除法为什么等同于异或运算&#xff1f;3.2 为什么除数的位数和被除数补充的位数相差为1&#xff1f;3.3 为什么CRC校验码不能纠正错误&#xff0c;只能检测错误&#xff1f; …