C语言提问3

来源:百度知道 编辑:UC知道 时间:2024/05/29 22:55:40
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。

输入格式:

从文件读入数据,第一行为K、L,其中K<=16,L<=10。

输出格式:

将结果输出并换行

样例

KGOOD.IN

4 2

KGOOD.OUT

7

#include<stdio.h>
void main()
{
int i,j,k,l,n,t,a[][];
scanf("%d%d",&k&l);
for(i=0;i<k;i++)
for(j=0;j<l;j++)
a[i][j]=i;
for(i=0;i<k;i++)
if(a[i][1]!=0)
{
for(j=0;j<k;j++)
for(n=0;n<l;n++)
if(abs(a[j][n]-a[j][n+1])!=1)
{
t++;
}
printf("%d",t);
}
其实这个题目很有意思,只要你能先建一个L行K列的二维数组及可以通过数组来找你要的数;
然后就是去掉首位是0 的数,这样就能找到所有的好数
例如下解释
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
这个数组种能表示5位的4进制的所有的数当然还有首位是0 的数;
然后就是用循环来找到所有的数并用条件把他们选出来就可以了;