• 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
    ",sum);
        return 0;
    }
  • 相关阅读:
    UVa 10010 Where's Waldorf?
    boost 学习笔记
    C++ enum类型的一个更好的用法
    新浪面试题:删除字符串中多余的空格
    微软面试题:写程序找出二叉树的深度
    c++中sizeof的分析
    复习计划
    boost学习之 时间和日期 timer
    c++ template学习总结3
    微软面试题:反序一个单向链表
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11152646.html
Copyright © 2020-2023  润新知