(纪中)1968. 买水(h2o)【数学(找规律)】

*(File IO): input:h2o.in output:h2o.out
时间限制: 1000 ms 空间限制: 128000 KB 具体限制


题目描述
小PP超喜欢喝水,所以他就去买水了。
商店里有 55 种水
11 种:商店里有无数瓶
22 种:商店里只有一瓶
33 种:商店里竟然有 44 瓶 。
44 种: 5555 瓶一包卖的
55 种: 2222 瓶一包卖的
好奇心极强的小PP想买nn 瓶水,他想知道他有多少种买法。


输入
输入文件 h2o.inh2o.in 的第一行包括一个正整数NN

输出
输出文件h2o.outh2o.out 有且仅有一个整数 , 为买水方案数。


样例输入
1

样例输出
3


数据范围限制
对于 1010% 的数据: n<=10n<=10;
2020% 的数据: n<=100000n<=100000;
对于 100100% 的数据: n<=2147483647n<=2147483647;


解题思路
我们发现其实用循环也是可以找出规律的,只需枚举每种水买多少瓶(包),在判断是否能凑成N瓶水即可,然后我们就得到了以下规律:
在这里插入图片描述* 我们可以发现
3=1+23=1+2
6=1+2+36=1+2+3
10=1+2+3+410=1+2+3+4
15=1+2+3+4+515=1+2+3+4+5
21=1+2+3+4+5+621=1+2+3+4+5+6
所以用等差数列求和公式即可,即答案为(n+1)(n+2)/2(n+1)(n+2)/2


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
   freopen("h2o.in","r",stdin);
   freopen("h2o.out","w",stdout);
   long long n;
   scanf("%lld",&n);
   printf("%lld",(n + 1) * (n + 2) / 2);
   return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章