解题思路:我的方法就是上来就把几种可能罗列出来,然后找规律,这种方法可能巨慢(反正我想了半天)
注意事项:以r转换为二进制后的最少位数开始,可能的次数为(2^k-2)+(2^k-3)+...+1,其中相加的数一共有2^k-2个(也就是内循环为2^k-2次),然后再往前加一位(从右往左),一直加到w(外循环),每加一位次数少1
参考代码:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=1,s=0,i,j,m=1;
int k=sc.nextInt();
int w=sc.nextInt();
if(k==1){
s=1;
}//当k为1时,为2进制,r只有一种可能
else{
for(i=0;i<k;i++){
n=n*2;
}//判断进制数
for(i=0;i<w-2*k;i++){
m=m*2;
}//2*k是当前进制转换为2进制后的最低位数(比如8进制转换为2进制后最少要有6位)
//w-2*k是输入的位数比最低位数多的位数,因为2进制只有0和1,所以所有可能的次数为m
for(j=0;j<m;j++){
for(i=0;i<n-2-j;i++){//每外循环一次,就往前多一位(从右往左)
s=n-i-2+s-j;//每加一位少一次
}
}
}
System.out.print(s);
}
0.0分
2 人评分
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3392 |
C语言训练-求函数值 (C语言代码)浏览:931 |
买不到的数目 (C++代码)浏览:862 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:603 |
剪刀石头布 (C语言代码)浏览:1747 |
WU-整除问题 (C++代码)浏览:611 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:660 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:562 |
母牛的故事 (C语言代码)浏览:940 |
Tom数 (C语言代码)浏览:492 |