最后一位数:计算从0到9的位数是序列中元素的最后一位数

时间:2014-08-28 18:42:32

标签: java arrays algorithm

我们有两个数字 a n

给出以下顺序:

[a^1, a^2, a^3.....a^n-1, a^n]

计算从0到9的数字是序列中元素的最后一位数

的次数

输入

  

a = 2, n = 7

输出

[0:0,1:0,2:2,3:0,4:2,5:0,6:1,7:0,8:2,9:0]

由于序列的最后一位数字为[2,4,8,6,2,4,8]

我的方法是创建 n a[n]数组,计算序列并存储在此数组中。制作另一个10,o [10]的数组,其中每个元素都是0.

现在从数组a[n],对于每个元素,执行m=a[i]%10,其结果将在数组o[m]数组中递增。假设我们 64%10 ,我们得到 4 。现在在索引 4 处增加数组的元素。

这是正确的做法吗?我无法编码。

5 个答案:

答案 0 :(得分:4)

由于您只对最后一位数感兴趣,因此只有a的最后一位是相关的,因为

(a * a) % 10 = ((a % 10) * (a % 10)) % 10

此外,最后的数字形成长度为124的重复模式,具体取决于a。特别是:

  • a % 5010156)相同的数字一直重复(0^n = 01^n = 1)。
  • 对于a % 5 -149),您会得到-11的交替模式({{1} })。特别是,对于mod 544都会6次出现n/2次。对于9,这适用于19
  • 对于a % 10 [2, 8] [2, 4, 6, 8] n / 4中的每个数字都会a % 10次出现。
  • 对于[3, 7] [1, 3, 7, 9] n / 4 10中的每个数字都会O(1)次出现。

在最后3个案例中可能会有一些余数。为此,您需要使用一个简单的算法,最多需要if (a % 10 in [0, 1, 5, 6]) return [a % 10: n] else if (a % 10 in [4, 9]) c = n / 2 r = n % 2 counts = [a % 10: c, 10 - a % 10: c] else c = n / 4 r = n % 4 if (a % 2 == 0) counts = [2: c, 4: c, 6: c, 8: c] else counts = [1: c, 3: c, 7: c, 9: c] d = a % 10 for i = 0; i < r; i++ counts[d]++ d = (d * a) % 10 return counts 个步骤。因此,这是{{1}}时间算法(伪代码):

{{1}}

答案 1 :(得分:0)

在伪代码中:

for i in 1 to n
  v = a^i
  o[v % 10]++
end

答案 2 :(得分:0)

使用System; 公共类CandidateCode {     public static string lastdigit(int input1,int input2)     {         //在这里写代码         int a = input1,n = input2;         int [] num = new int [10];         string output =&#34;&#34 ;;         for(int i = 0; i

答案 3 :(得分:0)

您可以通过

获取最后一位数字

a1 = Math.Pow(input1,input2); b1 = a1%​​10;

答案 4 :(得分:-1)

最后一位数您将获得两个数字。

给出以下顺序:

[a, a2, a3, … an-1, an]

计算从0到9的每个数字是序列中元素的最后一位数的次数 您的程序应接受文件名作为包含输入的参数。输入文件的每一行都包含一对整数an

输入/输出规格

示例例如,以下输入:

a = 2, n=7

将产生以下输出:

0 : 0, 1 : 0, 2 : 2,3 : 0 ,4 : 2, 5 : 0, 6 : 1 ,7 : 0 , 8 : 2 , 9 : 0

因为序列的最后几位是[2, 4, 8, 6, 2, 4, 8]