ZZULIOJ 2177 排列组合
来源:互联网 发布:tensorflow spyder 编辑:程序博客网 时间:2024/05/18 15:23
Description
平时大家都爱吃零食,但是大家知道吗?这些零食中大多数都是垃圾食品,它对我们身体的危害是很严重的。
最近,赵老师在进教室时常常闻到一股怪味,觉得有同学在吃垃圾食品,老师就开始查,果然,有个同学在吃辣条。于是,赵老师在班上举行了一次讨论会,要大家就“垃圾食品危害健康”这问题发表看法。
讨论会开始了,有的同学介绍了垃圾食品的危害,有的提醒我们不要去买,还有的说了垃圾食品的特点。
GJJ同学对于辣条并不感兴趣。聪明的他遇到了KKK,KKK问了聪明的他一个略显复杂的题目,虽然这个问题对于聪明的他来说问题不大,但是由于聪明的他比较懒,懒得去算,再加上昨晚修仙,今天他只想睡觉。所以,希望大家帮助KKK解决了这个问题,给你n个箱子和n个糖果,每个糖果都是独一无二的,n个箱子有序的摆成一排,箱子编号为1-n,每个箱子只能放一个糖果,然后要求你把n个糖果放进n个箱子中,那么可以得到一共有多少种方案。
显然这个方案数可以被2^M整除(M为一个非负整数),求M最大为多少?
Input
第一行输入一个t(t<=1e5),表示有t组数据
每组数据输入一个n(n为int范围内的正整数)
Output
输出一个整数(int范围内),输出占一行
Sample Input
21100000000
Sample Output
099999988
HINT
Source
思路:
方案数就是Ann(排列组合中的) ,能被2^m整除,求m,即为求 方案数 能被2整除的个数
此题中方案数为n的阶乘,求每个数能被2整除的个数,由于奇数不能被2整除,所以算的时候可以忽略奇数
对阶乘表达式一次一次求解相加 ,直接对n/2即可求出整除的个数
例如原来n的阶乘为 10 9 8 7 6 5 4 3 2 1(省略乘号)
第一次操作后 5 \ 4 \ 3 \ 2 \ 1 \ 总数加 5
第二次操作后 \ \ 2 \ \ \ 1 \ \ \ 总数加 2
第三次操作后 \ \ 1 \ \ \ \ \ \ \ 总数加 1
第四次操作后 \ \ \ \ \ \ \ \ \ \ 总数加 0
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std; int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int ans=0;while(n){int num=n/2;//求n的阶乘中有多少数能被2整除 //printf("=== %d\n",num);ans+=num; n/=2;//对所有偶数除2,表示现在的阶乘表达式还有几个偶数 }printf("%d\n",ans);}return 0;}
阅读全文
0 0
- ZZULIOJ 2177 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- 排列组合
- Gym
- hdu 2852 KiKi's K-Number(主席树)
- 启动eclipse报错:"could not create the java virtual machine"
- 提升树
- 【基础知识整理】cgi与fastcgi、RAII、dirent、boost::filesystem
- ZZULIOJ 2177 排列组合
- Triangles FZU
- 08:石头剪刀布
- 求数组中第K大的数
- Vue 折腾记
- 自动对比度、灰阶调整
- 代数发展简史
- 开发服务器
- hdu_2188