解题思路:
看了很多题解都是用了排列组合的思路来解这道题,个人觉得排列组合的思路很巧妙,但可能并不是很好理解,而且还要考虑大数的计算,并不是很方便.我的思路是把每个可能的数都验证一遍,判断是否符合题目要求。
参考代码:
#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语言代码)浏览:871 |
不容易系列2 (C语言代码)浏览:589 |
程序员的表白 (C语言代码)浏览:655 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:590 |
C二级辅导-阶乘数列 (C语言代码)浏览:688 |
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:774 |
完数 (C语言代码)浏览:685 |
Cylinder (C语言描述+详细分析)浏览:3263 |
大家好,我是验题君浏览:576 |
矩阵乘方 (C语言代码)浏览:1022 |