算法笔记之黑匣子问题(c++实现)
来源:互联网 发布:淘宝手机发票怎么开 编辑:程序博客网 时间:2024/04/30 06:20
最近在知乎上看见一个问题:
有一个黑匣子,黑匣子里有一个关于 x 的多项式 p(x) 。我们不知道它有多少项,但已知所有的系数都是正整数。每一次,你可以给黑匣子输入一个整数,黑匣子将返回把这个整数代入多项式后的值。那么,最少需要多少次, 我们可以得到这个多项式每项的系数呢?
思维过程和答案都很有意思,本人也是个菜鸟,默默地用c++实现并记录下来。
思维过程和答案都很有意思,本人也是个菜鸟,默默地用c++实现并记录下来。
/*输入:n:多项式的指数;an...a2,a1,a0各项系数(p(x)=an*x^n+an-1*x^(n-1)+...+a1*x+a0;)第一次输入的数:1 第二次输入的数:s+1输出:第一次输入数代入结果:s第二次输入数代入结果:s1热后输出各项系数:an,an-1...a1,a0;算法思想:第一次输入1所得s=an+an-1+..+a1+a0,第二次输入s,则s1=an*(s+1)^n+an-1*(s+1)^(n-1)+...+a1*(s+1)+a0 此处有重点,注意观察s1可以用s+1进制表示则可以将s1转换成s+1进制,然后得出各项系数注意:第一次得到S是为了保证对于任意系数其实最大系数不超过N的多项式,本来就是N进制的本质*/#include <iostream>#include <cmath>using namespace std;int main(){cout << "输入n:多项式的指数;an...a2,a1,a0各项系数:" << endl;int n;cin >> n;int *a = new int[n+1];for (int i = n; i >=0; i--){cin >> a[i];}cout << "第一次输入的数b1:" << endl;int b1, b2;cin >> b1;int s = 0;for (int i = n; i >=0; i--){s += (a[i] * pow(b1, i)); //调用乘方函数}cout << "第一次输入数b1代入结果s=" << s << endl;cout << "第二次输入的数b2:" << endl;cin >> b2;int s1= 0;for (int i = n; i >= 0; i--){s1 += (a[i] * pow(b2, i));}cout << "第一次输入数b2代入结果s1=" << s1<< endl;int *c = new int[n + 1];cout << "各项系数(an--a0):" << endl;for(int i = 0; i <= n; i++){//进制转换 辗转相除法 也可以用栈实现c[i] = s1 % (s + 1);s1 = s1 / (s + 1);}for (int i = n; i >= 0; i--){cout << c[i] << " ";}cout << endl;system("pause");return 0;
}
0 0
- 算法笔记之黑匣子问题(c++实现)
- 【基础算法】黑匣子(BZOJ1194)
- 360黑匣子之谜
- 算法:C语言实现笔记(1)
- 算法导论之最大子数组问题 C语言实现
- [算法]图算法之骑士遍历问题(象棋中马的遍历问题)分析,C语言实现
- 贪心算法之装箱问题(c++)
- 黑匣子
- 黑匣子
- 黑匣子
- 黑匣子
- 算法实现之希尔排序(C++)
- [算法]数据结构算法背包问题解法之递归解法,C语言实现
- 算法:C语言实现(第3章 学习笔记)
- 洛谷P1801 黑匣子(堆 )
- C语言笔记之排序算法(4)
- 分治算法中棋盘覆盖问题(c语言实现)
- 连通性问题--《C算法》学习笔记
- K-均值聚类算法
- 推荐三款强大的Js图表库
- js的单线程和异步
- Struts Series(4) - 日期类型转换
- 洛谷 2947 仰望Look Up(单调栈)
- 算法笔记之黑匣子问题(c++实现)
- 2012年奥巴马胜选演说
- Python 冒泡排序
- 异常处理:非法字符: '\ufeff'的解决方案
- Java.io.CharConversionException:EOF
- 学习Markdown
- linux高CPU进程
- NYOJ364 田忌赛马
- 基于深度摄像头的障碍物检测(realsense+opencv)