原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复