文章

26

粉丝

0

获赞

13

访问

1.9k

头像
排列与二进制 题解:不需要大数,需思考
P1368 吉林大学机试题
发布于2025年6月25日 20:18
阅读数 49

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n,m;
	while(cin>>n>>m&&(n!=0&&m!=0)){
		int num=0;
		for(int i=n-m+1;i<=n;i++){
			int k=i;
			while(k%2==0){
				num++;
				k=k/2;
			}
		}
		cout<<num<<endl;
	}
	return 0;
}

思考:
1. 排列数转换为二进制末尾的0是怎么生成的? 是因为原数直接对2不断取余,最开始一直是0。

2. 如何达到1中的效果?可以直接把相除剩下的(n-m+1~n)项每一项单独对2取余,遇到取余后余数不是0的项直接跳过即可,因为它们是相乘关系,只要有其他项符合即可。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发