买水(h2o)

比赛第一题,当然是水题啦 ,废话不多说让我们步入正题。
题目描述
小PP超喜欢喝水,所以他就去买水了。
商店里有 5 种水
第 1 种:商店里有无数瓶
第 2 种:商店里只有一瓶
第 3 种:商店里竟然有 4 瓶 。
第 4 种: 5 瓶5 瓶一包卖的
第 5 种: 2 瓶 2 瓶一包卖的
好奇心极强的小PP想买 n 瓶水,他想知道他有多少种买法。

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

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

样例输入
1

样例输出
3

数据范围限制
对于 10% 的数据: n<=10;
有 20% 的数据: n<=100000;
对于 100% 的数据: n<=2147483647;

题目简介(不想看题目的过来啦)
五种方法让你凑出一个n,让你求方案数。

题目解法
1.暴力,我们可以开一个5重循环去枚举,但显然这个方法只能过10%的数据。(但是我们考试的时候,一开始没想到别的好的方法,暴力枚举也有作用……)
2.数学解法
我们接上一句话,用暴力跑一遍:
得出:
n=1,ans=3;
n=2,ans=6;
n=3,ans=10;
n=4,ans=15;
n=5,ans=21……
这时,注意看ans。我们可以发现,他可以由等差数列得出——3=1+2,6=1+2+3,10=1+2+3+4……
那就可以快乐(快速)套用等差数列求和公式啦,直接输出(1+n)(n+2)/2就好啦!
代码部分:(自己去打啦,非常简单……只不过n要开longlong,输出longlong类型就好啦!)

#include<cstdio>
using namespace std;
long long n; 
void putin()
{
	scanf("%lld",&n);
}
int main()
{
	freopen("h2o.in","r",stdin);
	freopen("h2o.out","w",stdout);
	putin();
	printf("%lld",(1+n)*(2+n)/2);
	return 0;
}

没得问题的水题,推导过程倒是有点 (是我自己没料到等差数列这一步,想了一会)……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值