解题思路:根据题目位数最多为十六位,定义一个十七位的数组,相当于将多出来的一位作为循环判断的结束条件,最大一位定义为1,其余定义为0,让其去当前位数最小数。
从最小为开始递增,满k进一直到搜完全部。
以四位数十进制为例,开始取1000
a 0 | a 1 | a 2 | a 3 | a 4 |
0 | 0 | 0 | 1 | 0 |
9 | 9 | 0 | 9 | 0 |
0 | 0 | 0 | 0 | 1 |
注意事项:递增需要检查下一位是否因前一位递增而递增
(第一次写题解,注释时后面补上去的,私密马赛)
参考代码:
#include<stdio.h>
int main()
{
int a[17]={0},num=0,n,k,i=0,j;
if(scanf("%d%d",&n,&k));
a[n-1]=1; //取n位数的最小值
while(a[n]==0) //当数到达n位最大值+1时结束循环
{
for(j=0;j<n-1;j++) //判断是否是需要的数
{
if(a[j]==0&&a[j+1]==0)
break;
}
if(j>=n-1) //统计数字数
{
num++;
}
a[i]++; //从最小位a[0]自增,个位+1
while(a[i]==k) //第一次当个位+1满k时变0,下一位+1循环至不能满k进一为止
{
a[i]=0;
a[i+1]++;
i++; //用于判断位数
}
i=0; //清空位数,制个位
}
printf("%d\n",num);
}
0.0分
3 人评分
C二级辅导-计负均正 (C语言代码)浏览:556 |
回文数(一) (C语言代码)浏览:809 |
C语言训练-求PI* (C语言代码)浏览:638 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:562 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
WU-输出正反三角形 (C++代码)浏览:1099 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:366 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:606 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |