• K好数


    问题描述

    如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。

    输入格式

    输入包含两个正整数,K和L。

    输出格式
    输出一个整数,表示答案对1000000007取模后的值。
    样例输入
    4 2
    样例输出
    7
    数据规模与约定

    对于30%的数据,KL <= 106;

    对于50%的数据,K <= 16, L <= 10;

    对于100%的数据,1 <= K,L <= 100。

    解题思路:

    一开始想的太复杂,还想一个进制调用一个方法,后来又找规律,后来上网找了找,也没有思路,今天晚上是第二个晚上了!现在才做出来。

    上代码:

    #include<stdio.h>
    #include<math.h>
    int main(){
        long long l,num[500][500],sum=0;   // 为什么数组要这么大呢?
        int i,j,p,k;
        scanf("%d %lld",&k,&l); 
        
        for(i=0;i<k;i++)
            num[i][1] = 1;
        
        for(j=2;j<=l;j++){
            for(i=0;i<k;i++){
                for(p=0;p<k;p++){
                    if(abs(p-i)!=1){
                        num[i][j] += num[p][j-1];
                        num[i][j] = num[i][j] % 1000000007;
                    }
                }
                //printf("%d
    ",num[j][i]);
            }
        }
    
        for(i=1;i<k;i++){
            sum += num[i][l];
            sum %= 1000000007; 
        }
            
        
        printf("%I64d",sum);
        
        return 0;
    }
  • 相关阅读:
    JAVA之代理2CGLib
    Java并发编程:Lock
    synchronized详解
    redis哨兵机制--配置文件sentinel.conf详解
    redis.conf讲解
    [Java并发包学习八]深度剖析ConcurrentHashMap
    [Java并发包学习七]解密ThreadLocal
    T和Class以及Class的理解
    python学习笔记十:异常
    python学习笔记九:正则表达式
  • 原文地址:https://www.cnblogs.com/maxiaobao/p/5178500.html
Copyright © 2020-2023  润新知