PTA 6-2 多项式求值
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点的值。
函数接口定义
double f( int n, double a[], double x );
其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。
裁判测试程序样例
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf(“%lf”, &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例
2 1.1
1 2.5 -38.7
输出样例
-43.1
可通过代码
double f(int n, double a[], double x)
{
double sum = 0;
// 如果这时的 n 大于最大的数值,就返回比他小 1 的值
if (n >= MAXN)
{
n = MAXN - 1;
}
// 这个值用来做中间的计算,也就是计算 x 的中间计算
// 为什么 temp 默认值会是 1 ? 原因就是无论多大的数
// 100000000^0 等于 1
double temp = 1;
for (int i = 0; i <= n; i++)
{
// 第 1 次 是 x^0 刚好就是现在 temp 的值
sum = sum + a[i] * temp;
// 进行第 2 次计算 x^1 = x = temp * x
temp = temp * x;
}
return sum;
}
/*
// 里面存在x的多少次方,就需要重新定义一个函数来写,如果直接写在代码,代码很不好看
// 但是因为有时间的限制,所以不能使用这个方式,这个方式是每个 x 都需要重新计算多少次方
// 而比较快的方式是下一次的计算使用上一次计算的结果
// 在工程的开发,要尽量避免这种优化
// 但是在写题目到是可以这样考虑
// 每次计算的 x 的方都比原来的大 1 次,也就是我第 2 次的计算可以用到第 1 次计算的结果
double Pow(double x, int count)
{
double sum = x;
// 任何一个数的0次都是等于多少?
if (0 == count)
{
// 100000000^0
return 1;
}
// 这里使用 i = 1 因为这里的值默认 sum 就是等于 x
// 如输入 x^2 那么就是 x = x count = 2
// 如果这里的 i = 0 开始就会首先设置 sum = x;
// sum 会循环两次,于是返回 x^3 和需要的不一样
for (int i = 1; i < count; i++)
{
//sum = sum * x;
sum *= x;
}
return sum;
}
double f(int n, double a[], double x)
{
double sum = 0;
if (n >= MAXN)
{
n = MAXN - 1;
}
for (int i = 0; i <= n; i++)
{
sum = sum + a[i] * Pow(x, i);
}
return sum;
}
*/
考点:
大概的输入
是否可以在下一次运算使用上一次的值
阅读题目能力
第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
// JisnaicasManawashar.cpp: 定义控制台应用程序的入口点。
#include "stdafx.h"
#define MAXN 10
double f(int n, double a[], double x);
int main()
{
int n, i;
double a[MAXN], x;
//scanf("%d %lf", &n, &x);
//for (i = 0; i <= n; i++)
// scanf("%lf", &a[i]);
n = 2;
x = 1.1;
//1 2.5 -38.7
a[0] = 1;
a[1] = 2.5;
a[2] = -38.7;
printf("%.1f\n", f(n, a, x));
return 0;
}
double f(int n, double a[], double x)
{
double sum = 0;
// 如果这时的 n 大于最大的数值,就返回比他小 1 的值
if (n >= MAXN)
{
n = MAXN - 1;
}
// 这个值用来做中间的计算,也就是计算 x 的中间计算
// 为什么 temp 默认值会是 1 ? 原因就是无论多大的数
// 100000000^0 等于 1
double temp = 1;
for (int i = 0; i <= n; i++)
{
// 第 1 次 是 x^0 刚好就是现在 temp 的值
sum = sum + a[i] * temp;
// 进行第 2 次计算 x^1 = x = temp * x
temp = temp * x;
// 第1次 sum = 1
// 第2次 sum = 3.75
// 第3次 sum = -43.1
}
return sum;
}
/*
// 里面存在x的多少次方,就需要重新定义一个函数来写,如果直接写在代码,代码很不好看
// 但是因为有时间的限制,所以不能使用这个方式,这个方式是每个 x 都需要重新计算多少次方
// 而比较快的方式是下一次的计算使用上一次计算的结果
// 在工程的开发,要尽量避免这种优化
// 但是在写题目到是可以这样考虑
// 每次计算的 x 的方都比原来的大 1 次,也就是我第 2 次的计算可以用到第 1 次计算的结果
double Pow(double x, int count)
{
double sum = x;
// 任何一个数的0次都是等于多少?
if (0 == count)
{
// 100000000^0
return 1;
}
// 这里使用 i = 1 因为这里的值默认 sum 就是等于 x
// 如输入 x^2 那么就是 x = x count = 2
// 如果这里的 i = 0 开始就会首先设置 sum = x;
// sum 会循环两次,于是返回 x^3 和需要的不一样
for (int i = 1; i < count; i++)
{
//sum = sum * x;
sum *= x;
}
return sum;
}
double f(int n, double a[], double x)
{
double sum = 0;
if (n >= MAXN)
{
n = MAXN - 1;
}
for (int i = 0; i <= n; i++)
{
sum = sum + a[i] * Pow(x, i);
}
return sum;
}
*/
我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
PTA 6-2 多项式求值的更多相关文章
- 多项式求值问题(horner规则)——Python实现
# 多项式求值(Horner规则) # 输入:A[a0,a1,a2...an],x的值 # 输出:给定的x下多项式的值p # Horner迭代形式实现 1 # 在此修改初值 2 A = [2, 6 ...
- PTA之多项式求值
时间限制: 400ms 内存限制: 64MB 代码长度限制: 16KB 函数接口定义: double f( int n, double a[], double x ); 其中n是多项式的阶数,a[]中 ...
- PTA基础编程题目集6-2多项式求值(函数题)
本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑i=0n(a[i]×xi) 在x点的值. 函数接口定义: double f( int n, dou ...
- 多项式求值 n维多项式 Horner解法
#include<iostream> using namespace std; template<class T> T ploy(T *coeff,int n,const T& ...
- C006:多项式求值 horner法则
代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float x; do{ printf("E ...
- 多项式函数插值:多项式形式函数求值的Horner嵌套算法
设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t ...
- 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 ...
- 用递归方法求n阶勒让德多项式的值
/* Date: 07/03/19 15:40 Description: 用递归法求n阶勒让德多项式的值 { 1 n=0 Pn(x)= { x n=1 { ((2n-1) ...
- 洛谷P5282 【模板】快速阶乘算法(多项式多点求值+MTT)
题面 传送门 前置芝士 \(MTT\),多项式多点求值 题解 这题法老当初好像讲过--而且他还说这种题目如果模数已经给定可以直接分段打表艹过去 以下是题解 我们设 \[F(x)=\prod_{i=0} ...
随机推荐
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
- nested exception is org.hibernate.MappingException解决方案
1.可能是因为映射文件( Order.hbm.xm)配置的class路径出错 <hibernate-mapping> <class name="com.web.bean.O ...
- MaxCompute推出面向开发者的专属版本,普惠大数据开发者
3月20号,阿里云正式对外宣布推出MaxCompute产品的新规格-开发者版.MaxCompute开发者版是阿里云大数据计算服务发布的开发者专属版本.区别于原有的按量付费.按CU预付费规格,开发者版是 ...
- The 16th UESTC Programming Contest Final 游记
心情不好来写博客. 为了满足ykk想要气球的愿望,NicoDafaGood.Achen和我成功去神大耍了一圈. 因为队名一开始是LargeDumpling应援会,然后队名被和谐,变成了学校的名字,顿时 ...
- $.inArray()方法
$.inArray() 函数用于在数组中查找指定值,并返回它的索引值(如果没有找到,则返回-1) 提示:源数组不会受到影响,过滤结果只反映在返回的结果数组中. 语法 $.inArray( value, ...
- V8引擎实现标准ECMA-262(三)
推荐英文原址ECMA-262 3.构造函数 构造函数除了通过指定的模式创建对象以外,还有另外一个好处--它能够自动设置新创建对象的原型对象,这个原型对象存储在构造函数的Prototype属性中. 例如 ...
- Codeforces 404B
毫无疑问这题不是难题,但是这种题目最让人纠结 打心里对这种题目就比较害怕,果然,各种WE 这里贴上代码,用Python写的,比较偷懒: def cur_pos(a, d): if 0 <= d ...
- SPSS分析技术:无序多元Logistic回归模型;美国总统大选的预测历史及预测模型
SPSS分析技术:无序多元Logistic回归模型:美国总统大选的预测历史及预测模型 在介绍有序多元Logistic回归分析的理论基础时,介绍过该模型公式有一个非常重要的假设,就是自变量对因变量多个类 ...
- jdbc连接数据库的步骤(转载)
http://hzy3774.iteye.com/blog/1689525 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过jav ...
- MSSQL → 01:SQLServer 2008概述及安装
据库的发展史 在人类诞生以来,就有记录数据的需求,在远古时代就有了结绳记事的故事,而随着科技的进步,我们记录数据的方式也发生了天翻地覆的变化,从效率低.规模小.不能适应信息高速发展的需要的手工或者简单 ...