找到偶数位数的第N个数字

时间:2016-06-06 07:08:06

标签: algorithm

考虑一下我们只有<?= $browser['browser']; ?> 位数。现在我们必须找到一系列的N个数字。

{0,2,4,6,8}

我们怎样才能有效地做到这一点?

Series : 0,2,4,6,8,20,22,24,26,28,40.....

int start=0;
while(found!=n){

      if(start is not odd)found++;
      start+=2;
}

4 个答案:

答案 0 :(得分:5)

你试图用5位数组成一个数字,所以这实际上是一个基数为5的数字,只是用一组奇怪的数字 - {0,2,4,6,8}代替{0,1 ,2,3,4}。请注意,所需数字集中的每个数字是基数为5的数字集的相应索引中的数字的两倍。因此,长话短说,您可以将N转换为基数5,然后将结果加倍。例如,Java(或C / C ++,有趣的是):

int createNumber(int n) {
    int result = 0;
    while (n > 0) {
        result *= 10;
        result += (n % 5);
        n /= 5;
    }
    return result * 2;
}

答案 1 :(得分:1)

将0,2,4,6,8视为0,1,2,3,4,我们可以看到你需要计算N的基数为5的表示,然后相应地替换数字。时间复杂度为O(log5(N))

// N stores a value in base 10
   // solution will have digits in an array
   index = 0 ;
   while (N != 0)
   {
      remainder = N % 5 ;
      N = N / 5 ;
      digit[index] = remainder * 2; //0 = 2*0, 2 = 2*1, 4=2*2, etc
      index ++ ;
   }

答案 2 :(得分:0)

详细说明:

转换N->N-1以排除0

A = {0, 2, 4, 6, 8}

让我们计算有多少个数字k(k > 1)位数及其所有数字属于集合{0, 2, 4, 6, 8}。可以4方式选择第一个数字,以5方式选择所有其他数字,总共4*pow(5, k-1)。这意味着,如果m = ceil(log5(N)),那么N系列中的数字有m位数。

现在,如果base-5的{​​{1}}表示中的第一个数字等于Ni,则我们答案中的第一个数字为(1 <= i <= 4)。同样保持第二位数字等等。

因此,在您的算法中,您需要在A[i]中展示N,例如base-5,其中每个N=abcde..都在a,b,c范围内,而您的回答将是映射每个[0..4] - &gt;的结果a

答案 3 :(得分:-2)

您可以使用置换算法,然后按升序对其进行排序。使用此功能,即使您向样本空间添加更多数字,该系列仍然可以使用。见 - https://en.wikipedia.org/wiki/Heap's_algorithm

注意:对于这么简单的事情使用排列是过分的。但是如果你正在寻找一个可以占用更多数字并形成一个系列的算法,那么排列是一种很好的使用方法。