2016Y FJNU 2016-2017学年第二十届低年级程序设计竞赛(正式赛) Problem E: 杂物整理

来源:互联网 发布:pubmed数据库主题词 编辑:程序博客网 时间:2024/04/27 18:45

Problem E: 杂物整理

TimeLimit:1000 MS        Memory Limit:257792 KB
64-bit interger IO format: %lld        Java class name:Main

 

啊。。。。要搬到112懒惰的IDrandom说。
因为IDrandom比较懒惰,所以他放在实验室里了很多东西。正因为这样,他搬东西的时候很麻烦,因此他把他所有的东西都放在了若干个大小相等的箱子里搬了过去。但是ID君是一个有强迫症的人,他一定要把箱子堆成若干堆,并遵循以下的规则每当他新开始摆放一堆箱子时,会想要在这一堆摆放尽量多的箱子,并且把这一堆摆成一个自认为完美的三角形。
ID
自认为完美的三角形是这么定义的:
假如一共有k层,那么从上往下数的第i层有i个箱子。
比如说,假如ID现在有9个箱子:
摆第一堆的时候摆出一个3层的完美三角形,因为4层的完美三角形需要10个箱子
摆第二堆的时候摆出一个2层的完美三角形,因为刚好剩下3个箱子。
那么他一共摆了两堆。
现在告诉你ID君有多少个箱子要摆,问按照ID君的强迫症,ID君最后会堆出多少个完美的三角形?

Input

第一行输入一个整数T(T<=1000),代表有多少组测试数据
接下来T行,每行代表一组测试数据,对于每组测试数据
输入一个整数n0<n<=1000,代表ID需要摆放的箱子个数

Output

对于每组测试数据,输出一行,包括一个数c,代表ID君最后堆出的完美三角形的个数

Sample Input

2

9

3

SampleOutput

2

1

 

分析:

在我看来有点贪心的意思

这题怎么讲呢,我比较水昂,讲一下我的思路。

首先我们看到他说的,第i层有I 个箱子,我们可以用公式算出要叠i层我需要几个箱子了。

这是一个等差数列,由等差数列的公式sum=n*a1+(n*(n-1)/2)*d我们可以得到叠i层需要多少个箱子的公式:sum=n*(n+1)/2;打一个需要的箱子的表。打一个多大的表呢?我们看到input中最大的箱子数为1000,算一下最大有多少层n*(n+1)/2=1000,呀数学有点差阿,取个整数吧,最大50层,可以开始打表了。

打完表我们可以开始贪心了,怎么贪?ID君都说了他想要一层摆尽可能多的箱子阿。那我们就给他一层中尽可能多的箱子嘛。怎么给他?这个时候就要发挥我们打得表的作用了,给他一层尽可能多的箱子我们就要从叠最高层开始循环。这样就可以使一堆中得到最多的箱子了。50层嘛循环过来数据也不大,没问题。好像讲完了呐,好渣,别打我over。


上代码:


0 0