C++ 从一系列数字中获得数值k的技术是什么?
给定序列s:1,1,2,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,5,1,2,3,4,5,1,2。。。 对于自然数k,如果(x1>0)返回x1,则0C++ 从一系列数字中获得数值k的技术是什么?,c++,sequence,C++,Sequence,给定序列s:1,1,2,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,5,1,2,3,4,5,1,2。。。 对于自然数k,如果(x1>0)返回x1,则00),则返回x2; 其他回报-32000; } } void main() {int k,n; 浮动x; cin>>k; x=方程式(1,1,-2*k); n=x*(x+1)/2; 如果(n==x)f考虑按顺序生成序列中的所有项,将它们存储在具有索引的数据结构中(例如向量),然后只需查找适当的k(请记住,向量将从零开始索引,而赋
如果(n==x)f考虑按顺序生成序列中的所有项,将它们存储在具有索引的数据结构中(例如向量),然后只需查找适当的k(请记住,向量将从零开始索引,而赋值显然不从零开始)。它的意思是: 让
x(x+1)/2=k
方程
使用二次公式求解x
。然后
n=x*(x+1)/2
这应该使n==k
,除非发生了奇怪的事情。那么如果
n==x
n
是您的答案否则输出
k-n*(n+1)/2
我要做的是: 找出您已通过的完整序列数。然后计算差异。
为此,您需要在
x(x+1)/2=k中求解x
,然后向下取整x
。
然后执行k-|x |(|x |+1)/2
(这里的|
用于四舍五入)
那么你能指出你的解决方案与我的不同之处吗
实际上,当x==“x”
您的代码几乎正确,只需将其更改为:
void main()
{
int k;
cin>>k;
int n = Equation(1,1,-2*k);
int x = n*(n+1)/2;
if (x == k) f<<n;
else f<<k - x;
f.close();
}
void main()
{
int k;
cin>>k;
int n=方程(1,1,-2*k);
int x=n*(n+1)/2;
如果(x==k)F你坚持使用哪一部分?你试过在调试器中运行它来跟踪它的行为吗?序列不是1000个元素长,或者你错过了一个6
。不回答问题这是迄今为止找到k的最简单的方法,但我忘了提到我需要使用二次方程来解决问题。比不管怎么说,你的方法对我来说更吸引人。n妨碍了我理解代码,但现在很明显,通过将x四舍五入,更容易找到解决方案。谢谢你,非常感谢!@user1012732我已将修复包含在你的代码中。
void main()
{
int k;
cin>>k;
int n = Equation(1,1,-2*k);
int x = n*(n+1)/2;
if (x == k) f<<n;
else f<<k - x;
f.close();
}