循环 — 你必须要会的十五道编程题(2)

简介: 循环 — 你必须要会的十五道编程题(2)

10.一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。

该题目需要循环10次,在每一循环的时候,需要将下落的高度和回弹的高度加起来。需要注意的点,第10次下落不需要在计算回弹的距离了,所以需要特殊处理下。在计算每次高度的时候,会有小数存在,所以需要选用浮点数

源代码如下:

#include <stdio.h>
int main()
{
//总高度
double total_m = 100.0;
//小球经历的米数
double total_sum = 0.0;
for (int i = 0; i < 10; i++)
{
total_sum += total_m;
total_m /= 2;
total_sum += total_m;
} 
//不需要计算第10次的反弹高度,所以减去
total_sum -= total_m;
printf("小球总共经历%lf米, 第10次反弹%lf米\n", total_sum, total_m);
return 0;
}

11. 猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。

后一天的桃子数量 = 前一天桃子数量 / 2 - 1

前一天的桃子数量 = (后一天桃子数量+1) * 2

我们知道了第10天剩余桃子的数量,则可以依次推算出桃子的前一天桃子的总数。需要注意的点,猴子只是吃了9天,所以,我们只需要遍历9次就可以了

12. 用牛顿迭代法求下面方程在1.5附近的根:2x^3- 4x^2 + 3x - 6= 0

#include <stdio.h>
#include <math.h>
int main()
{
    double x1, x0, f, f1;
    x1 = 1.5;
do
{
    x0 = x1;
    f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
    f1 = (6 * x0 - 8) * x0 + 3;
    x1 = x0 - f / f1;
} while(fabs(x1 - x0) >= 1e-5);
printf("方程在1.5附近的根为:%lf\n", x1);
return 0;

13. 用二分法求上一题方程在(-10,10)的根:

将区间划分为两部分,记录区间左右端点,得到中点。每次运算将中点带入方程进行运算,求得结果,

进行分析:

结果 > 0:将中位数赋值给右端点

结果 < 0:将中位数赋值给左端点

以此类推...

fabs函数是一个求绝对值的函数,求出x的绝对值,和数学上的概念相同;


1e-5:10^{-5},即0.00001

14. 输出以下图案:

 *

 ***

*****

*******

*****

 ***

  *


该题目需要关心当前行对应的从最左边到第一颗 * 的空格数量以及星星数量。将该题分为两个部分,前面4行和后面3行来进行拆分。

前4行中:

第一行:行号为0, 空格数为3,星星数量为1;

第二行:行号为1, 空格数为2, 星星数量为3;

第三行:行号为2, 空格数为1, 星星数量为5;

第四行:行号为3, 空格数为0,星星数量为7;

则我们可以推出两组关系,即行号和空格数量关系为:空格数 = 3 - 行号 。行号与星星的关系为星星数 = 2 * 行号 + 1

后三行中:

第一行:行号为0,空格数为1,星星数量为5;

第二行:行号为1, 空格数为2, 星星数量为3;

第三行:行号为2, 空格数为3,星星数量为1;

则我们推出两组关系,即行号与数量的关系:空格数 = 行号 + 1。行号与星星的关系:星星数 = 7- 2 *(行号+1)

15. 两个乒乓球队进行比赛,各出3人。甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单。


从题面上得知,每队为3人,则隐含条件为队内三人是不能比赛的,并且A一定不会和X比,C一定不会X和Z比;则我们不难写出判断条件:

如果A和X比 或者 C和X比 或者 C和Z比 或者 A和B比 或者 A和C比 或者 B和C比,都是不可以的;所以我们只要穷举A比赛对象,B比赛对象,C比赛对象,判断上述条件就可以了;

后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                              ——By 作者:德塔

相关文章
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
【Android开发小技巧】扔掉这坑人的 Handler
191 0
|
11月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
2082 8
YOLOv11改进策略【SPPF】| SimSPPF,简化设计,提高计算效率
|
存储 关系型数据库 算法框架/工具
Ceph 架构以及部署
Ceph 架构以及部署
605 26
|
自然语言处理 算法 数据可视化
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
9-4|Python在一群人聊天记录中提取关键字 需要什么步骤
|
数据采集 存储 JavaScript
使用Python截取网页内容的综合指南
使用Python截取网页内容的综合指南
599 1
|
前端开发 API Python
Matplotlib从入门到精通02-层次元素和容器
Matplotlib从入门到精通02-层次元素和容器
Matplotlib从入门到精通02-层次元素和容器
|
Oracle Java 关系型数据库
Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)
Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)
|
XML JSON 负载均衡
掌握 gRPC 状态码
gRPC(gRPC Remote Procedure Call)是一个高性能的开源框架,它通过远程过程调用(RPC)机制促进应用程序之间的通信。
|
Rust 小程序
小程序警告:Now you can provide attr wxkey for a wxfor to improve performance
首先,无论什么程序,控制台中的警告都是会影响程序性能的。我们需要减少此类警告的出现,以提高程序的运行性能。 小程序开发的时候,遇到了如下的警告:
341 0