PTA 6-2 多项式求值

本题要求实现一个函数

本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑i=0n(a[i]×xi)" role="presentation">f(x)=∑ni=0(a[i]×xi)f(x)=∑i=0n(a[i]×xi)在x点的值。

函数接口定义

  1. double f( int n, double a[], double x );

其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。

裁判测试程序样例

  1. #include <stdio.h>
  2. #define MAXN 10
  3. double f( int n, double a[], double x );
  4. int main()
  5. {
  6. int n, i;
  7. double a[MAXN], x;
  8. scanf("%d %lf", &n, &x);
  9. for ( i=0; i<=n; i++ )
  10. scanf(“%lf”, &a[i]);
  11. printf("%.1f\n", f(n, a, x));
  12. return 0;
  13. }
  14. /* 你的代码将被嵌在这里 */

输入样例

  1. 2 1.1
  2. 1 2.5 -38.7

输出样例

  1. -43.1

可通过代码


  1. double f(int n, double a[], double x)
  2. {
  3. double sum = 0;
  4. // 如果这时的 n 大于最大的数值,就返回比他小 1 的值
  5. if (n >= MAXN)
  6. {
  7. n = MAXN - 1;
  8. }
  9. // 这个值用来做中间的计算,也就是计算 x 的中间计算
  10. // 为什么 temp 默认值会是 1 ? 原因就是无论多大的数
  11. // 100000000^0 等于 1
  12. double temp = 1;
  13. for (int i = 0; i <= n; i++)
  14. {
  15. // 第 1 次 是 x^0 刚好就是现在 temp 的值
  16. sum = sum + a[i] * temp;
  17. // 进行第 2 次计算 x^1 = x = temp * x
  18. temp = temp * x;
  19. }
  20. return sum;
  21. }
  22. /*
  23. // 里面存在x的多少次方,就需要重新定义一个函数来写,如果直接写在代码,代码很不好看
  24. // 但是因为有时间的限制,所以不能使用这个方式,这个方式是每个 x 都需要重新计算多少次方
  25. // 而比较快的方式是下一次的计算使用上一次计算的结果
  26. // 在工程的开发,要尽量避免这种优化
  27. // 但是在写题目到是可以这样考虑
  28. // 每次计算的 x 的方都比原来的大 1 次,也就是我第 2 次的计算可以用到第 1 次计算的结果
  29. double Pow(double x, int count)
  30. {
  31. double sum = x;
  32. // 任何一个数的0次都是等于多少?
  33. if (0 == count)
  34. {
  35. // 100000000^0
  36. return 1;
  37. }
  38. // 这里使用 i = 1 因为这里的值默认 sum 就是等于 x
  39. // 如输入 x^2 那么就是 x = x count = 2
  40. // 如果这里的 i = 0 开始就会首先设置 sum = x;
  41. // sum 会循环两次,于是返回 x^3 和需要的不一样
  42. for (int i = 1; i < count; i++)
  43. {
  44. //sum = sum * x;
  45. sum *= x;
  46. }
  47. return sum;
  48. }
  49. double f(int n, double a[], double x)
  50. {
  51. double sum = 0;
  52. if (n >= MAXN)
  53. {
  54. n = MAXN - 1;
  55. }
  56. for (int i = 0; i <= n; i++)
  57. {
  58. sum = sum + a[i] * Pow(x, i);
  59. }
  60. return sum;
  61. }
  62. */

考点:

  1. 大概的输入

  2. 是否可以在下一次运算使用上一次的值

  3. 阅读题目能力

第2个考点是有些问题,如果比较会设计的小伙伴,就会写出我注释的代码

在工程使用是建议使用被注释的代码,但是被注释的代码会多了一次循环,于是会运行超时

第3个考点在于一开始的 n 的值,i <= n的循环和 i < n 的循环次数不相同

另外for (int i = 0; i < n; i++)for (int i = 1; i < n; i++)的循环次数也不相同,都是相差 1 ,在于初始化 i 的大小和判断循环。

因为 PTA 没有告诉说代码的输出是什么,而且输出在哪里出错了,所以对于初学者还是比较难的,很多很难知道自己的程序在哪错了。一个建议是使用 CodeBlock 进行调试或者 VisualStudio 调试。

两个调试是不相同,可以看到 CodeBlock 支持比较简单的程序,而且使用也很简单。比较推荐简单的代码使用 CodeBlock ,如果训练的要求是实际使用,那么建议使用 VisualStudio 。可以从安装的时候看到 VisualStuio 很大,而且开始部署环境也是比较困难。但是 VisualStudio 可以开发几乎任何的软件。

下载CodeBlock请到官网:Download binary

下载 VisualStudio 请到官网 Visual Studio

在部署完成VisualStudio 之后,可以使用我修改的代码运行。需要注意在 VisualStduio 需要使用 scanf_s 替换scanf,其他几乎不需要修改。

下面的代码复制之后就可以在 VisualStudio 运行调试,注意 VisualStudio

  1. // JisnaicasManawashar.cpp: 定义控制台应用程序的入口点。
  2. #include "stdafx.h"
  3. #define MAXN 10
  4. double f(int n, double a[], double x);
  5. int main()
  6. {
  7. int n, i;
  8. double a[MAXN], x;
  9. //scanf("%d %lf", &n, &x);
  10. //for (i = 0; i <= n; i++)
  11. // scanf("%lf", &a[i]);
  12. n = 2;
  13. x = 1.1;
  14. //1 2.5 -38.7
  15. a[0] = 1;
  16. a[1] = 2.5;
  17. a[2] = -38.7;
  18. printf("%.1f\n", f(n, a, x));
  19. return 0;
  20. }
  21. double f(int n, double a[], double x)
  22. {
  23. double sum = 0;
  24. // 如果这时的 n 大于最大的数值,就返回比他小 1 的值
  25. if (n >= MAXN)
  26. {
  27. n = MAXN - 1;
  28. }
  29. // 这个值用来做中间的计算,也就是计算 x 的中间计算
  30. // 为什么 temp 默认值会是 1 ? 原因就是无论多大的数
  31. // 100000000^0 等于 1
  32. double temp = 1;
  33. for (int i = 0; i <= n; i++)
  34. {
  35. // 第 1 次 是 x^0 刚好就是现在 temp 的值
  36. sum = sum + a[i] * temp;
  37. // 进行第 2 次计算 x^1 = x = temp * x
  38. temp = temp * x;
  39. // 第1次 sum = 1
  40. // 第2次 sum = 3.75
  41. // 第3次 sum = -43.1
  42. }
  43. return sum;
  44. }
  45. /*
  46. // 里面存在x的多少次方,就需要重新定义一个函数来写,如果直接写在代码,代码很不好看
  47. // 但是因为有时间的限制,所以不能使用这个方式,这个方式是每个 x 都需要重新计算多少次方
  48. // 而比较快的方式是下一次的计算使用上一次计算的结果
  49. // 在工程的开发,要尽量避免这种优化
  50. // 但是在写题目到是可以这样考虑
  51. // 每次计算的 x 的方都比原来的大 1 次,也就是我第 2 次的计算可以用到第 1 次计算的结果
  52. double Pow(double x, int count)
  53. {
  54. double sum = x;
  55. // 任何一个数的0次都是等于多少?
  56. if (0 == count)
  57. {
  58. // 100000000^0
  59. return 1;
  60. }
  61. // 这里使用 i = 1 因为这里的值默认 sum 就是等于 x
  62. // 如输入 x^2 那么就是 x = x count = 2
  63. // 如果这里的 i = 0 开始就会首先设置 sum = x;
  64. // sum 会循环两次,于是返回 x^3 和需要的不一样
  65. for (int i = 1; i < count; i++)
  66. {
  67. //sum = sum * x;
  68. sum *= x;
  69. }
  70. return sum;
  71. }
  72. double f(int n, double a[], double x)
  73. {
  74. double sum = 0;
  75. if (n >= MAXN)
  76. {
  77. n = MAXN - 1;
  78. }
  79. for (int i = 0; i <= n; i++)
  80. {
  81. sum = sum + a[i] * Pow(x, i);
  82. }
  83. return sum;
  84. }
  85. */

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

PTA 6-2 多项式求值的更多相关文章

  1. 多项式求值问题(horner规则)——Python实现

    # 多项式求值(Horner规则) # 输入:A[a0,a1,a2...an],x的值 # 输出:给定的x下多项式的值p   # Horner迭代形式实现 1 # 在此修改初值 2 A = [2, 6 ...

  2. PTA之多项式求值

    时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: double f( int n, double a[], double x ); 其中n是多项式的阶数,a[]中 ...

  3. PTA基础编程题目集6-2多项式求值(函数题)

    本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑​i=0​n​​(a[i]×x​i​​) 在x点的值. 函数接口定义: double f( int n, dou ...

  4. 多项式求值 n维多项式 Horner解法

    #include<iostream> using namespace std; template<class T> T ploy(T *coeff,int n,const T& ...

  5. C006:多项式求值 horner法则

    代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float x; do{ printf("E ...

  6. 多项式函数插值:多项式形式函数求值的Horner嵌套算法

    设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t ...

  7. 2018-6-29-PTA-6-2-多项式求值

    title author date CreateTime categories PTA 6-2 多项式求值 lindexi 2018-06-29 15:24:28 +0800 2018-6-14 22 ...

  8. 用递归方法求n阶勒让德多项式的值

    /* Date: 07/03/19 15:40 Description: 用递归法求n阶勒让德多项式的值      { 1  n=0    Pn(x)= { x  n=1      { ((2n-1) ...

  9. 洛谷P5282 【模板】快速阶乘算法(多项式多点求值+MTT)

    题面 传送门 前置芝士 \(MTT\),多项式多点求值 题解 这题法老当初好像讲过--而且他还说这种题目如果模数已经给定可以直接分段打表艹过去 以下是题解 我们设 \[F(x)=\prod_{i=0} ...

随机推荐

  1. django 结合 bootstrap 使用

    git clone https://github.com/dyve/django-bootstrap3.git 要运行demo,需要在demo 中为其增加一个符号链接 bootstrap3 到上层目录 ...

  2. 2019-10-18-dotnet-修复找不到-System.ServiceProcess-定义

    title author date CreateTime categories dotnet 修复找不到 System.ServiceProcess 定义 lindexi 2019-10-18 21: ...

  3. 文本分类四之权重策略:TF-IDF方法

    接下来,目的就是要将训练集所有文本文件(词向量)统一到同一个词向量空间中.在词向量空间中,事实上不同的词,它的权重是不同的,它对文本分类的影响力也不同,为此我们希望得到的词向量空间不是等权重的空间,而 ...

  4. Mysql+php报错原因

    SQL syntax --语法错误,看near,错误会在near后引号中的内容 的附近 Table/Database....... dosen't existes ---表/库(库名/表名) 不存在 ...

  5. 【JZOJ4746】【NOIP2016提高A组模拟9.3】树塔狂想曲

    题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1).如下图是一个数塔,映射到该数塔上行 ...

  6. Apache Camel 与 Spring Boot 集成,通过FTP定时采集、处理文件 (转)

    1.概要: 本项目主要是通过在Spring平台上配置Camel.FTP,实现定时从FTP服务器下载文件到本地.解析文件.存入数据库等功能. 2.搭建空项目: Spring Boot有几种自动生成空项目 ...

  7. 模拟登录新浪微博(Python) - 转

    Update: 如果只是写个小爬虫,访问需要登录的页面,采用填入cookie 的方法吧,简单粗暴有效,详细见:http://www.douban.com/note/264976536/模拟登陆有时需要 ...

  8. JavaScript学习之 倒计时

    倒计时很常见,例如离XX活动还有XX天XX小时XX分XX秒,然后逐秒减少,实现很简单,我只是想记录这过程中的一点小坑. 先上代码: <html> <head> <meta ...

  9. JavaScript--模拟百度搜索下拉li

    上效果: 主要思路: 函数indexOf() .join().innerHTML的使用,还有 用完的数组要清空 <!DOCTYPE html> <html> <head ...

  10. Hibernate错误——No row with the given identifier exists

    错误 是用的是Hibernate自动建立的数据表,在进行数据库操作时,出现错误No row with the given identifier exists 解决 关系数据库一致性遭到了破坏,找到相关 ...