zzuli 2177 小姐姐的忠告:少吃辣条多刷题(简单题)

**Contest - 河南省多校连萌(四)**Problem F: 小姐姐的忠告:少吃辣条多刷题 =========================[题目链接](https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2177)Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 100 Solved: 44**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

简单题 就是求1,2,3···n,每个数分解质因数之后一共有多少个2,那么不断的除2加2即可,n/2 表示1-n中是2的倍数的数有多少个,然后加n/2 就是这些数每个数贡献一个2n/(2^2) 同理,,4的倍数的数每个至少有两个2可以贡献,由于上一层贡献了一个2,那么此时至少可以再贡献一个,所以加n/(2^2)····循环至n/(2^k)==0

 1 #include <bits/stdc++.h>
 2 using namespace std; 
 3 int main ()
 4 {
 5     int t;
 6     scanf("%d", &t);
 7     while(t--)
 8     {
 9         int n;
10         scanf("%d", &n);
11         int sum = 0;
12         while(n)
13         {
14             n /= 2;
15             sum += n;
16         }
17         printf("%d\n", sum);
18     }
19     return 0;
20 }

 

**Contest - 河南省多校连萌(四)**Problem F: 小姐姐的忠告:少吃辣条多刷题 =========================[题目链接](https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2177)Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 100 Solved: 44**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简单题 就是求1,2,3···n,每个数分解质因数之后一共有多少个2,那么不断的除2加2即可,n/2 表示1-n中是2的倍数的数有多少个,然后加n/2 就是这些数每个数贡献一个2n/(2^2) 同理,,4的倍数的数每个至少有两个2可以贡献,由于上一层贡献了一个2,那么此时至少可以再贡献一个,所以加n/(2^2)····循环至n/(2^k)==0```#include <bits/stdc++.h>using namespace std; int main (){ int t; scanf("%d", &t); while(t--) { int n; scanf("%d", &n); int sum = 0; while(n) { n /= 2; sum += n; } printf("%d\n", sum); } return 0;}```

posted @ 2017-08-19 21:06  南风古  阅读(120)  评论(0编辑  收藏  举报