从一系列数字中获取数值k的技术是什么?

时间:2013-06-13 18:07:44

标签: c++ sequence

给定序列s:1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,1, 2,...... 对于自然数k,0 <0。 k <= 1000,从s序列确定k位置上的元素的值。 示例:对于k = 2,值为1,对于k = 8,值为2

以下是代码:

#include<fstream.h>
#include<math.h>
ofstream f("sir.out");

float Equation (int a, int b, int c)
{ int d;
  float x1,x2;
  d=b*b-4*a*c;
  if(d<0) return -32000;
  else if(d==0) { x1=-b/(2*a);
              if(x1>0) return x1;
              else return -32000;
            }
   else { x1=(-b-sqrt(d))/(2*a);
          x2=(-b+sqrt(d))/(2*a);
          if(x1>x2) if(x1>0) return x1;
                    else return -32000;
          else if(x2>0) return x2;
               else return -32000;
        }
}

void main()
{ int k,n;
  float x;
  cin>>k;
  x=Equation(1,1,-2*k);
  n=x*(x+1)/2;
  if(n==x) f<<n;
  else f<<k-n*(n+1)/2;
  f.close();
}

请你解释一下这有用吗?我理解这个功能,但我不确定如何获得该值......

2 个答案:

答案 0 :(得分:0)

考虑按顺序生成序列中的所有项,将它们存储在带索引的数据结构中(例如向量),然后简单地查找适当的k(记住你的向量将从零开始索引,而你的任务显然没有。)

答案 1 :(得分:0)

它说:

x(x+1)/2 = k
Equation使用二次公式求解x 然后n=x*(x+1)/2应该n==k,除非出现奇怪的事情 如果n==x n是您的答案,那么 否则输出k - n*(n+1)/2


我要做的是:

找出你传递了多少完整序列。然后算出差异。
为此,您将在x中解决x(x+1)/2 = k然后向下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();
}
相关问题