解题思路:
看了很多题解都是用了排列组合的思路来解这道题,个人觉得排列组合的思路很巧妙,但可能并不是很好理解,而且还要考虑大数的计算,并不是很方便.我的思路是把每个可能的数都验证一遍,判断是否符合题目要求。
参考代码:
#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 人评分