NKOJ【宽容的欢乐赛】还是孩子(c++)

问题描述

nodgd小时候是个熊孩子,每次惹了祸都需要家长去赔礼道歉。久而久之,家长就积累除了经验,只要说“他还是个孩子,不懂事,您就别计较了”,对方就只得作罢。

有一次nodgd参加小伙伴的生日聚会,小伙伴买了个很大的蛋糕准备分给参加聚会的每个人吃。nodgd熊性大发,抢过蛋糕,亲自操刀,刀法精湛,巧夺天工。

蛋糕的俯视图是一个圆。nodgd首先在圆周上标记了n个点,然后在任意两个点之间都切下笔直的一刀,把蛋糕切成了很多份。下图中分别是nodgd在n=2,3,4,5的时候切蛋糕的结果。

nodgd的刀法足够精湛,切蛋糕的过程中蛋糕不会散架。nodgd并不关心这样切出来的每一份蛋糕形状如何、大小是否相等、是否好吃,只关心最多能够切出多少份蛋糕。

输入格式

输入一行,只有一个整数n,表示nodgd在圆周上标记的点数。

输出格式

输出一行,一个整数,表示nodgd最多可以把蛋糕切成多少分。

样例输入 1

3

样例输出 1

4

样例输入 2

4

样例输出 2

8

样例输入 3

5

样例输出 3

16

数据与提示

对于100%的数据,2≤n≤60。

分析:

       刚开始,我做的时候,一直找不到规律,后来我经过尝试,终于发现了规律。

如上图所示,令点数用i,块数用a[i],块数之差用b[i],块数之差的差用c[i],所以a[2]=2,b[2]=2,c[2]=2

经过观察,我们可以发现c[i]=c[i-1]+i-1,b[i]=b[i-1]+c[i-1],a[i]=a[i-1]+b[i-1]。我们发现了规律,就可以写代码了

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[65],b[65],c[65];
int main(){
    scanf("%d",&n);//输入
    a[2]=2;
    b[2]=2;
    c[2]=2;//初始化
    for(int i=3;i<=n;i++){//循环求a[n]
    	c[i]=c[i-1]+i-1;
    	b[i]=b[i-1]+c[i-1];
    	a[i]=a[i-1]+b[i-1];//规律
	}
	printf("%d",a[n]);//输出
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

点赞+关注,刷题不迷路!!!!!!!!!!!!!!!!!!

---------------------------------------------------------------------------------------------------------------------------------

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值