B. Buttons

题目链接:http://codeforces.com/problemset/problem/268/B

 

大概的意思就是说有n个按钮,但是这n个按钮有唯一的正确的组成,看你最坏的情况找到这唯一的组成需要几次。

 

这题目是一个找规律的题目,但是一开始自己认为这个规律是递归的,所以一直没有找到一个正确的公式

 

然后看了一下别人的博客,才开始有点理解应该如何去思考这个题目

 

思路:

首先我们假设是第i轮,第i轮是为了找到第i个正确的按键。第i轮我们之前已经按下了i-1个按键,还剩下n-(i-1) = n - i + 1个按键需要去按

 

先看样例:

如果是2个按键

第一轮: 我们需要多按1次才可以找到

第二轮:我们需要多按0次就可以找到

 

如果是3个按键

第一轮:我们需要多按2次才可以找到

第二轮:我们需要多按2次才可以找到

 

注意这里我说的是多按,就是正确的那一次我们不算入里面

 

理论上来看:

剩下n-i+1个按键,把上次按错按钮导致的重置步数加到确认下一个按钮的步数中,直到我们找到正确的按钮,这时需要按 (n-i)*i次。

所以,第i轮总共需要按 1+(n-i)*i次按钮。

 

AC代码:

#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
#include <cstdbool>
#include <string.h>
#include <math.h>

using namespace std;


int main()
{
    int n;
    cin >> n;
    int sum = 0;
    for (int i=1;i<=n;i++)
    {
        sum += ((n-i)*i + 1);
    }
    printf("%d\n",sum);
    return 0;
}

 

转载于:https://www.cnblogs.com/-Ackerman/p/11152646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值