• PTA题目集(Java语言)


    PTA题目集(Java语言)

    二分法求多项式单根

    ** 二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f®=0。**
    二分法的步骤为:
    检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则
    如果f(a)f(b)<0,则计算中点的值f((a+b)/2)
    如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则
    如果f((a+b)/2)f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;
    如果f((a+b)/2)f(b)同号,则说明根在区间[a,(a+b)/2],令b=(a+b)/2,重复循环。
    本题目要求编写程序,计算给定3阶多项式(x)=a3 * x*x*x + a2 * x*x + a1 * x +a0;

    在给定区间[a,b]内的根。

    输入格式:
    输入在第1行中顺序给出多项式的4个系数a3,a2,a1,a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。


    输出格式:
    在一行中输出该多项式在该区间内的根,精确到小数点后2位。

    输入样例:
    3 -1 -3 1
    -0.5 0.5
    
    输出样例:
    0.33
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    分析:
    1.输入在第1行中顺序给出多项式的4个系数a3,a2,a1,a0,所以要先定义一个 大小为 4 的 double 型数组用于存储输入的数据,(当然,你要定义 4 个 double 型浮点数输入也行)。

    static double[] arr = new double[4];// static 修饰后,可以直接调用
    
    • 1

    2.在第2行中顺序给出区间端点a和b,即要 2 个 double 型浮点数输入。

    double a = myScanner.nextDouble();
    		double b = myScanner.nextDouble();
    
    • 1
    • 2

    3.进行判断,由于每一次判断都要用到 f(x) 的函数值所以单独定义,判断的时候直接调用
    完整代码

    import java.util.Scanner;
    public class case4 {
    	static double[] arr = new double[4];// static 修饰后,可以直接调用
    	public static void main(String[] args) {
    		Scanner myScanner = new Scanner(System.in);
    		for (int i = 3; i >= 0; i--) {// 从 arr[3] 开始输入,
    			arr[i] = myScanner.nextDouble();
    		}
    		double a = myScanner.nextDouble();
    		double b = myScanner.nextDouble();
    		double mid = 0;
    		while (b - a >= 0.001 && f(a) * f(b) <= 0) {// a 等于 b 并且 2 个端点值的乘积小于 0
    			if (f(a) == 0) { // 当 a 的 y 值为0,a 就是根
    				mid = a;
    				break;
    			} else if (f(b) == 0) {// 当 b 的 y 值为0,b 就是根
    				mid = b;
    				break;
    			} else {// a b 对应的 y 都不为 0,执行下面操作
    				mid = (a + b) / 2;
    				if (f(mid) == 0) { // 当中间值对应的 y 值为0,中间值就是根
    					break;
    				} else { // 否则进行判断
    					if (f(a) * f(mid) >= 0) { //如果左边端点和中间值对应的 y 乘积大于等于 0,说明根不在这个区间,在 (mid,b)区间
    						a = mid;
    					} else {
    						b = mid;
    					}
    				}
    			}
    		}
    		System.out.printf("%.2f", mid);
    	}
    
    	public static double f(double x) {// 构造函数
    		double sum = 0;
    		sum = arr[3] * x * x * x + arr[2] * x * x + arr[1] * x + arr[0];
    		return sum;
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    在这里插入图片描述

    念数字

    输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

    0: ling
    1: yi
    2: er
    3: san
    4: si
    5: wu
    6: liu
    7: qi
    8: ba
    9: jiu
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    代码如下

    import java.util.Scanner;
    public class case5 {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int i = sc.nextInt();
    		if (i < 0) {
    			System.out.print("fu ");
    		}
    		//String.valueOf(i); 将 i 转换成字符串
    		//Math.abs()函数返回一个数字的绝对值
    		String str = String.valueOf(Math.abs(i));
    		// 
    		String[] a = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
    		// 根据输入的字符串长度确定循环次数
    		//k <= str.length() - 1; 下标从 0 开始,输入 4 个字符,最后一个下标就是 3,所以要减 1
    		for (int k = 0; k < str.length() - 1; k++) {
    			/*char运算用到的是ASCII码,减去的是0的ASCII码(48)前面str.charAt(k)依次是
    			 * str.charAt(1)、str.charAt(2)...,,就是字符串中的第一个字符,第二个字符...,
                           * 字符串和数组相似,第一个字符对应的索引是0、第二个字符对应的索引是1……,而
                 * s.charAt(1)是1,对应的ASCII码为49,以此只有减去48,才能得到第一个数:1
    			 */
    			int s = str.charAt(k) - '0';
    			System.out.print(a[s] + " ");
    		}
    		int s = str.charAt(str.length() - 1) - '0';//求数组元素的下标
    		System.out.println(a[s]);//在用下标进行输出对应的字符
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

  • 相关阅读:
    cuda 探索
    同步网盘选择指南:哪个同步网盘更好用?
    [ISITDTU 2019]EasyPHP
    计算机毕业设计小程序点餐|外卖|餐饮系统+后台SSM
    (Transferrin)TF-PEG-DBCO/TCO/tetrazine 转铁蛋白-聚乙二醇-二苯基环辛炔/反式环辛烯/四嗪
    【大数据存储技术】第4章&第5章 HBase 原理与使用
    如何使用Selenium进行自动化测试
    西电数据挖掘实验1——二分网络上的链路预测
    NLP预训练模型-GPT-3
    如何使用 LinkedHashMap 实现 LRU 缓存?
  • 原文地址:https://blog.csdn.net/qq_53661628/article/details/127940539