hdu 1178 Heritage from father (推导)
题意:
有一个金币堆的金字塔,最上层就有一个金币,以后的i层都是边长为i的实心三角形,给你层数,问:一共有多少个金币?(用科学计数法表示,并且保留两位小数)
解题思路:
根据题意可知求出1*n+2*(n-1)+3*(n-2)+4*(n-3)+.......+(n-2)*3+(n-1)*2+n*1的和即可,但是要化简一下求出n*(n+1)*(n+2)/6;
证明:
1 * n + 2 (n - 1) + 3 (n - 2) + …… + (n - 2) * 3 + (n - 1) * 2 + n * 1
= 1 * (n + 1 - 1) + 2 (n + 1 - 2) + 3 (n + 1 - 3) + …… + (n - 2) * (n + 1 - (n - 2)) + (n - 1) * (n + 1 - n - 1) + n * (n + 1 - n)
=(1 + 2 + 3 + ... + n)(n + 1) - (1^2 + 2^2 + 3^2 + ..... + n^2)
=n (n + 1)^2 / 2 - n (n + 1) (2n + 1) / 6 (n (n + 1) (2n + 1) / 6后面会证明)
=n * (n + 1) * (n + 2) / 6 (证毕)
(n+1)^3-n^3=3n^2+3n+1,
n^3-(n-1)^3=3(n-1)^2+3(n-1)+1
3^3-2^3=3*(2^2)+3*2+1
2^3-1^3=3*(1^2)+3*1+1.
这n个等式两边分别相加得出:
(n+1)^3-1=3(1^2+2^2+3^2+....+n^2)+3(1+2+3+...+n)+n,
(n+1)^3-1=3(1^2+2^2+3^2+....+n^2)+3((n+1)n/2)+n,
整理可得上述式子。
代码:
#include <stdio.h>
int main ()
{
int n, i, k;
double s; while (scanf ("%d", &n), n)
{
s = 1.0 * n * (n+) * (n+) / ;
k = ;
while (s >= )
{
s /= ;
k++;
}
printf ("%.2fE%d\n", s, k);
} return ;
}
最新文章
- bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~
- 关于激活Bentley软件详细步骤介绍(再补充一个)
- C#反射设置属性值和获取属性值
- warning C4005: “AF_IPX”: 宏重定义的解决办法
- unity3d web.config设置
- VS构建工具介绍
- ios 字典转模型
- 使用FTP删不掉文件的解决方法
- java gui可见即可得
- Java 枚举7常见种用法(转)
- 七个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
- Django项目结构介绍
- LeetCode算法题-Convert BST to Greater Tree(Java实现)
- JAVAEE 第六周
- linux shell脚本调用java main方法 代码
- verilog中defparam的用法 (verilog调用底层模块(只改变)参数的传递)
- Greenplum query Oracle via DLINK
- Python学习笔记(一)——基本知识点
- 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html
- WPF 降低.net framework到4.0
热门文章
- 删除,“windows setup 启用EMS”
- matlab 画图技巧
- Visual Studio VS如何卸载Visual assistant
- HDU4763 Theme Section 【KMP】
- POJ之01背包系列
- HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路
- casperjs在拆分文件后的中文乱码问题的解决
- YTU 2754: C++习题-快速排序
- web项目开发 之 前端规范 --- HTML编码规范
- 五:多线程--NSOperation基本操作