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:0:41 +0800
|
C 算法
|
本题要求实现一个函数
本题要求实现一个函数,计算阶数为n
,系数为a[0]
...
a[n]
的多项式$f(x)=\sum_{i=0}^{n}(a[i]\times x^i)$在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;
} */
<script type="text/javascript" async src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
2018-6-29-PTA-6-2-多项式求值的更多相关文章
- PTA 6-2 多项式求值
PTA 6-2 多项式求值 本题要求实现一个函数 本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑i=0n(a[i]×xi)" role=" ...
- 多项式求值问题(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.12.30 洛谷P4238 【模板】多项式求逆
传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...
- 记2018/4/29 qbxt 测试
记 2018/4/29 qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...
随机推荐
- solr dataimport中遇到的问题
1.windows的tomcat是没有catalina.out的,可以通过修改start.bat和catalina.bat的方式让日志输出到catalina.out 2.按照网上搜到的资料配置好sol ...
- 【JZOJ4755】【NOIP2016提高A组模拟9.4】快速荷叶叶变换
题目描述 输入 一行,包含两个整数N,M. 输出 1个整数,FHT(N,M) mod 1000000007的值. 样例输入 3 4 样例输出 1 数据范围 对于 40% 的数据,1 ≤ N,M ≤ 1 ...
- linux 下安装编译配置 QT
注: 1,自己 make qt-everywhere-opensource-src s时,在./configure前主动装好以下3个 sudo apt-get install libX11-dev l ...
- python 类的创建
- 阿里小二的日常工作要被TA们“接管”了!
昨天有人偷偷告诉我说 阿里巴巴其实是一家科技公司! 我想了整整一夜 究竟是谁走漏了风声 那么重点来了,阿里到底是如何在内部的办公.生活中,玩转“黑科技”的呢? AI取名:给你专属的“武侠”花名 花名是 ...
- 强制去除xcode的编译警告
使用 #pragma clang diagnostic ignored 语法来强制去除xcode的编译警告,代码举例如下: #pragma clang diagnostic push #pragma ...
- HLSL效果框架
原文:HLSL效果框架 HLSL效果框架能简化许多操作.这里先不写具体的效果框架的程序,在处理多光源光照的时候再整理. 下一章:效果框架-多种光源的多光源 叠加效果 这儿先列出效果框架的一个注意点: ...
- Gym - 101480A_ASCII Addition
题目链接 题解:普通的a+b才怪问题,需要绘制出来,方法有点麻烦. #include <iostream> #include <string.h> #include <s ...
- hihoCoder#1239 Fibonacci
#1239 : Fibonacci 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given a sequence {an}, how many non-empty s ...
- CCPC final Cockroaches
算法假了,我想的是通过枚举x,删除y的影响,这样答案第一个是没有任何问题的,但是第二个会算重复. 因为我枚举每一个x的时候,得到的y,而算另外一个x的时候,可能已经通过其他的点选到了这个点y这就有点麻 ...