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



我们得到两个数字an

给定以下顺序:

[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]

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

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

这是正确的方法吗?我无法对其进行编码。

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

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

此外,根据a,最后的数字形成长度为124的重复模式。特别是:

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

在最后3种情况下,可能还有一些剩余部分。为此,您需要使用一个简单的算法,该算法最多需要10个步骤。因此,这是一个O(1)时间算法(伪代码):

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

在伪代码中:

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

使用系统;公共类CandidateCode{公共静态字符串最后一位数字(int input1,int input2){//在此处编写代码int a=input1,n=input2;int[]num=新的int[10];字符串输出=";for(int i=0;i

您可以通过获取最后一位数字

a1=数学Pow(输入1,输入2);b1=a1%10;

最后一位给您两个数字。

给定以下顺序:

[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

因为序列的最后数字将是CCD_ 46。

最新更新