当前位置: 首页 > 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;
}

相关文章:

  • 再写数的划分(dfs)
  • 第四章 面向对象(基础)
  • SymAgent:一种用于知识图谱复杂推理的神经符号自学Agent框架
  • Linux Kernel调试:强大的printk(三)
  • Markdown 到 LaTeX:Overleaf 学习笔记
  • 基于javaweb的SpringBoot体检管理系统设计与实现(源码+文档+部署讲解)
  • 【C++】unordered_map、unordered_set 的使用
  • CQF预备知识:Python相关库 -- NumPy 基础知识 - ndarray 索引
  • vue3组件--无限滚动效果
  • Android7 Input(九)View 建立Input Pipeline
  • 15 dart类(get,set,静态,继承,抽象,接口,混入)
  • Gartner报告解读《Technical Professionals Need to Track 5 ImportantLLM Developments》
  • 论文审稿之我对SCI写作的思考
  • CSS之元素定位
  • 批量获取电商商品数据的解决方案|API接口自动化商品采集|item_get 接口详解
  • 动态规划算法:字符串类问题(2)公共串
  • 【电子通识】FPC连接器组成部分与不良案例术语
  • Day02
  • 嵌入式学习笔记——day25
  • 英伟达破局1000 Token/秒!Llama 4以光速重塑AI推理边界
  • 房地产培训网站建设/seo是什么简称
  • 个人网站在那建设/沈阳关键词优化报价
  • 铜川免费做网站/专业黑帽seo
  • 网站建设小工具/白杨seo课程
  • 模板网站什么意思/抖音代运营收费详细价格
  • 苏州市工业园区规划建设局网站/怎么把平台推广出去