当前位置: 首页 > news >正文

PTA刷题笔记(难度预警!!!有详解)

·7-18 二分法求多项式单根

代码如下:

​
#include <stdio.h>
#include <math.h>// 定义多项式函数
double polynomial(double x, double a3, double a2, double a1, double a0) {return a3 * x * x * x + a2 * x * x + a1 * x + a0;
}// 二分法求根函数
double bisection_method(double a3, double a2, double a1, double a0, double a, double b) {double fa = polynomial(a, a3, a2, a1, a0);double fb = polynomial(b, a3, a2, a1, a0);double mid, fmid;const double threshold = 1e-6; // 阈值设为10^-6while (fabs(b - a) >= threshold) {mid = (a + b) / 2;fmid = polynomial(mid, a3, a2, a1, a0);if (fabs(fmid) < threshold) {return mid; // 正好找到根,不用fmid == 0的原因是避免浮点数精度问题导致无法准确判断零点}if (fa * fmid < 0) { // 根在左半区间b = mid;fb = fmid;} else { // 根在右半区间a = mid;fa = fmid;}}return (a + b) / 2; // 返回区间中点作为近似根
}int main() {double a3, a2, a1, a0;double a, b, root;// 读取多项式系数scanf("%lf %lf %lf %lf", &a3, &a2, &a1, &a0);// 读取区间端点scanf("%lf %lf", &a, &b);// 使用二分法求根root = bisection_method(a3, a2, a1, a0, a, b);// 输出结果,保留2位小数printf("%.2f\n", root);return 0;
}​

代码说明:

1. 多项式函数:polynomial 函数计算给定x值时多项式的值。

2. 二分法实现:
   · 初始化区间端点的函数值
   · 循环直到区间长度小于阈值(1e-6)
   · 计算中点及其函数值
   · 根据中点函数值调整搜索区间

3. 主函数:
   · 读取多项式系数(a3, a2, a1, a0)
   · 读取搜索区间[a, b]
   · 调用二分法函数求根
   · 输出结果,保留2位小数

4. 精度控制:
   · 使用1e-6作为阈值,确保结果精确
   · 输出时使用%.2f格式保留2位小数

·7-22 龟兔赛跑

 解题思路
1. 初始化变量:设置乌龟和兔子的初始位置为0,时间从0开始。
2. 模拟每分钟的过程:
   · 乌龟每分钟固定前进3米。
   · 兔子每分钟前进9米,但需要检查是否满足休息条件:
     · 每跑10分钟,兔子会检查是否超过乌龟。如果是,则休息30分钟;否则继续跑。
   · 注意处理兔子的休息状态,休息期间兔子不移动。
3. 比较结果:根据T分钟后的距离,输出胜者或平局。

代码如下:

#include <stdio.h>int main() 
{int T;scanf("%d", &T); // 输入比赛时间int turtle = 0; // 乌龟跑的距离int rabbit = 0; // 兔子跑的距离int rabbit_rest = 0; // 兔子剩余休息时间int rabbit_run = 0; // 兔子已经跑了多少分钟(用于判断是否到10分钟)for (int t = 1; t <= T; t++) {turtle += 3; // 乌龟每分钟跑3米if (rabbit_rest > 0) {rabbit_rest--; // 兔子在休息} else {rabbit += 9; // 兔子每分钟跑9米rabbit_run++;if (rabbit_run == 10){ // 每跑10分钟检查一次if (rabbit > turtle) {rabbit_rest = 30; // 休息30分钟}rabbit_run = 0; // 重置跑步计时}}}// 输出结果if (turtle > rabbit) {printf("@_@ %d\n", turtle);} else if (rabbit > turtle) {printf("^_^ %d\n", rabbit);} else {printf("-_- %d\n", rabbit);}return 0;
}

代码说明
1. 输入处理:读取比赛时间T。
2. 模拟过程:
   · 乌龟每分钟固定增加3米。
   · 兔子每分钟检查是否在休息,如果不是,则跑9米,并检查是否达到10分钟。如果是,则判断是否超过乌龟,决定是否休息。
3. 结果输出:根据T分钟后的距离,输出对应的符号和距离。

 注意事项
· 兔子的休息时间是30分钟,期间不移动。
· 每跑10分钟,兔子会检查一次是否超过乌龟,而不是每10分钟固定休息。
· 输出符号需严格匹配题目要求(`@_@`、`^_^`、`-_-`)。

·7-23 币值转换

代码如下:

#include<stdio.h>
int main()
{int m,flag1 =0,flag2 = -1;/*举个例子:3600存储在下面数组中下标:0    1     2     3      4     5    6    7    8单位:亿   千万  百万  十万   万    千   百    十    个值  :0    0     0     0      0    3    6    0     0*///flag1用于标记输入数据的最高位所在数组的位置(后面会把输入的数字拆开每一位存入数组,//如果数值比较小,前面就会有很多零,因此要找到第一个不为零的位置从这里开始输出)//flag2用于标记最后一个非零数字位置(如3600读作三千六百,后面的两个零是不输出的)char u1[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};//存储0-9代表的字母scanf("%d", &m);//如果输入值为0,直接输出0并退出程序即可;if(m == 0){printf("a");exit(0);}int a[9] = {0};//定义一个上面画的数组char u2[8] = {'Y', 'Q', 'B', 'S', 'W', 'Q', 'B', 'S'};//把单位存下来//获取各位数字并存到数组中for(int i = 8; i >= 0; i--){a[i] = m % 10;m /= 10;}//寻找最后一个非零数字位置for(int j = 0; j < 9; j++){if(a[j] == 0) flag2 = j - 1;else flag2 = -1;}for(int i = 0; i < 9; i ++){//遍历到最后一个非零位置直接退出循环if(i == flag2) {break;}//找到第一个不为零的位置,flag变为1,此后就一直是1;if(a[i]! = 0) flag1 = 1;//情况一:该位置数字≠0,这种最简单,直接输出对应字母if(flag1 == 1){if(a[i] != 0){printf("%c", u1[a[i]]);}//情况二:对于该位置数字=0,要继续分多种情况讨论else if(a[i] == 0){//情况(1)中间单个0if(a[i-1] != 0 && a[i+1] != 0){//如101这种情况printf("a");continue;//此处continue的原因是不能出现一百零十一,零是没有单位的}//情况(2)中间有多个零,如10086,else if(a[i-1] == 0 && a[i+1] != 0{ printf("a");}//判断当前位置是否为中间的最后一个零,只需输出最后一个零即可//情况(3)中间有多个零但零和它前面的数字组成整体,如100000十万,第一个零后带有单位万else {if(a[i-1] != 0){printf("%c",u2[i]);}//输出数字对应单位}}//最后正常输出单位即可,注意最后一个数字无单位,因此不能输出u2[8];if(i < 8 && a[i] != 0){printf("%c", u2[i]);}}}return 0;
}

http://www.xdnf.cn/news/636679.html

相关文章:

  • 区块链可投会议CCF C--APSEC 2025 截止7.13 附录用率
  • leetcode 131. Palindrome Partitioning
  • Oracle 19c TFA工具的安装与使用详解
  • 【辰辉创聚生物】FGF信号通路相关蛋白:解码生命调控的关键枢纽
  • 第三十一天打卡
  • 医学写作供应商管理全流程优化
  • Github 今日热点 完全本地化的自主AI助手,无需API或云端依赖
  • 【JSON 】全面掌握JSON的相关知识
  • 上海医日健集团物联网专利技术领跑智慧药房赛道
  • C++编程单例模式详细解释---模拟一个网络配置管理器,负责管理和分发网络连接参数
  • 【OCCT+ImGUI系列】010-BRepMesh-网格化IncrementalMesh
  • 文本特征提取
  • GO 语言进阶之 进程 OS与 编码,数据格式转换
  • 【Leetcode 每日一题】2131. 连接两字母单词得到的最长回文串
  • 39.组合总和
  • leetcode560-和为k的子数组
  • arxml文件
  • JVM 的类加载机制
  • 进程管理(第二、三、四章)
  • 【车用永磁同步电机随机开关频率控制策略:高频谐波抑制的工程实践】
  • Python入门手册:条件判断
  • 云原生安全之网络IP协议:从基础到实践指南
  • mysql都有哪些锁?
  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别