算法笔记之黑匣子问题(c++实现)

本文介绍了如何利用C++编程解决一个算法问题:通过输入两次整数来确定未知多项式的系数。首先输入1获取多项式总和,然后输入总和加1,根据结果转换为自定义进制,从而推导出各项系数。
摘要由CSDN通过智能技术生成
最近在知乎上看见一个问题:
有一个黑匣子,黑匣子里有一个关于 x 的多项式 p(x) 。我们不知道它有多少项,但已知所有的系数都是正整数。每一次,你可以给黑匣子输入一个整数,黑匣子将返回把这个整数代入多项式后的值。那么,最少需要多少次, 我们可以得到这个多项式每项的系数呢?
思维过程和答案都很有意思,本人也是个菜鸟,默默地用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进制的本质
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值