问题遇到的现象和发生背景
问题描述
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11 13 20 22 30 31 33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。
问题相关代码,请勿粘贴截图
#include<stdio.h>
int main()
{
int k,l, i, j, m, sum;
printf("请输入进制和数位:");
scanf_s("%d%d", &k, &l);
if (l == 1)
{
printf("该整数取模后的K好数为:%d", k);
}
else
{
int dp[l + 1][k];
for (i = 0; i < k; i++)
{
dp[1][i] = 1;
}
for (i = 2; i < l + 1; i++)
{
for (j = 0; j < k; j++)
{
sum = 0;
for (m = 0; m < k; m++)
{
if (m - j != 1 && j - m != 1)
{
sum = (sum + dp[i - 1][m])% 1000000007;
}
}
dp[i][j] = sum;
}
}
sum = 0;
for (i = 1; i < k; i++)
{
sum = (sum + dp[l][i]) % 1000000007;
}
printf("求模后好数为:%d", sum);
}
return 0;
运行结果及报错内容
(活动) E0028 表达式必须含有常量值
C2131 表达式的计算结果不是常数
C3863 不可指定数组类型“int [l+][k]”