• poj 2000Gold Coins


     1 http://poj.org/problem?id=2000
     2 这是一道关于数学上数列的问题,题目给出了骑士为国王服务的天数,要求输出骑士得到的金币
     3 要想得到最终的答案,最简单的方法就是找到,骑士第几次给国王服役,因为骑士第一次给国王服役一天,然后每次服役都比上一次服役的时间增加一天,这就相当于数学上的等差数列,公差是1.我们要做的就是求出对应的那个n
     4 公式n*(n+1)/2是最终的和
     5 但是题目中所给的那个数,并不一定凑巧就是等差数列的和,所以就要做一下排除
     6 求出n之后,就用1*1+2*2+3*3......+n*n;然后加上剩余的一部分,就是最终的答案
     7 其中用到的一个公式就是高中数学中,数列求和的公式
     8 1*1+2*2+3*3+...+n*n = n*(n+1)*(2*n+1)/6
     9 下面是代码部分,很简短
    10 #include<stdio.h>
    11 #include<math.h>
    12 #include<iostream>
    13 using namespace std;
    14 int main()
    15 {
    16     int n;
    17     while(scanf("%d",&n) && n)
    18     {
    19         int temp, s;
    20         temp = (int)sqrt(n*2);
    21         if(n-temp*(temp+1)/2 < 0)
    22             temp--;
    23         s = temp*(temp+1)*(2*temp+1)/6 + (temp+1)*(n-temp*(temp+1)/2);
    24         cout<<n<<' '<<s<<endl;
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    java降序排列
    冒泡排序-java
    redis-并发竞争问题
    超卖问题
    算法-题目汇总-6
    算法-题目汇总-4
    算法-题目汇总-1
    算法-二分查找-1
    算法-bst-平衡搜索二叉树-1
    算法-位运算-1
  • 原文地址:https://www.cnblogs.com/SDUTYST/p/3090422.html
Copyright © 2020-2023  润新知