原题链接:2^k进制数
解题思路:
看了很多题解都是用了排列组合的思路来解这道题,个人觉得排列组合的思路很巧妙,但可能并不是很好理解,而且还要考虑大数的计算,并不是很方便.我的思路是把每个可能的数都验证一遍,判断是否符合题目要求。
参考代码:
#include<stdio.h>
#include<math.h>
int main()
{
int k,w;
int x,y,z,f;
int sum=0;
scanf("%d%d",&k,&w);
int max=pow(2,w)-1;//最大的可能性
int J=pow(2,k);//进制
int i=J;//最小的可能性
while(i<=max)//暴力循环
{
x=i;
f=1; //标志位,符合为1,不符合为0
/**/
z=x%J;
x=x/J;
while(x!=0)
{
y=x%J;
x=x/J;
if(z<=y)f=0;//一旦前一位不小于后一位 说明该数不符合
z=y;
}
if(f==1)sum++; //该数符合,总数加一
i++;//验证下一个数
}
printf("%d",sum);
return 0;
}0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复