本文介绍了如何找到可以被7整除的数字计数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出一个整数 N ,如何有效地找到以下范围内被7整除的数(它们的倒数也应被7整除):

Given an integer N, how to efficiently find the count of numbers which are divisible by 7 (their reverse should also be divisible by 7) in the range:


  • [0,10 ^ N-1]

  • [0, 10^N - 1]

示例:

对于 N = 2 ,答案:


  • 4 {0,7,70,77}

  • 4 {0, 7, 70, 77}

[从0到99的所有数字都可以被7整除(也可以将它们的反数整除)]

[All numbers from 0 to 99 which are divisible by 7 (also their reverse is divisible)]

我的方法,简单的暴力破解:

My approach, simple brute-force:


  • 将计数初始化为零

  • i = 0 到结束

  • 如果 a(i)%7 == 0& ;& reverse(a(i))%7 == 0 ,然后我们增加计数

  • initialize count to zero
  • run a loop from i=0 till end
  • if a(i) % 7 == 0 && reverse(a(i)) % 7 == 0, then we increase the count

注意:


  • reverse(123)= 321 reverse( 1200)= 21 ,例如!

  • reverse(123) = 321, reverse(1200) = 21, for example!

推荐答案

使用数字dp技术对任何数字进行递归的解决方案。

There is a recursive solution using digit dp technique for any digits.

long long call(int pos , int Mod ,int revMod){
    if(pos == len ){
        if(!Mod && !revMod)return 1;
        return 0;
    }
    if(dp[pos][Mod][revMod] != -1 )return dp[pos][Mod][revMod] ;

    long long res =0;
    for(int i= 0; i<= 9; i++ ){
        int revValue =(base[pos]*i + revMod)%7;
        int curValue = (Mod*10 + i)%7;
        res += call(pos+1, curValue,revValue) ;
    }

    return dp[pos][Mod][revMod] = res ;
}

这篇关于如何找到可以被7整除的数字计数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 10:45