解题思路:根据题目位数最多为十六位,定义一个十七位的数组,相当于将多出来的一位作为循环判断的结束条件,最大一位定义为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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复