解题思路:自然数的个数递推式:h[i] = h[1] + h[2] +...+ h[i/2]; s[i] 为h[i] 前缀和,所以h[i] = 1 + s[i/2](扩展出的自然数包括i本身); 计算前缀和s[i] = s[i-1] + h[i];
注意事项:
参考代码:
#include<iostream> #include<limits> using namespace std; const int N = 1e5 + 10; int h[N],s[N]; int main() { int n; cin >> n; for(int i = 1; i <= n; i ++){ h[i] = 1 + s[i/2]; s[i] = s[ i - 1 ] + h[i]; } cout << h[n]; return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:683 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:720 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:574 |
简单的a+b (C语言代码)浏览:627 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:683 |
奖学金 (C++代码)浏览:2008 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:879 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:349 |
完数 (C语言代码)浏览:693 |