休息一下,轻松一下,看到一个求和的题目,有点意思

yyouyou 2009-12-11 02:19:00
在一张纸上写有94个自然数:1、2、3、4、5、6、7……、93、94。
  划去最前面两个数1、2,而将他们的和3写在最后面,成为:3、4、5、6、7、……、94、3。
  然后再划去最前面两个数3、4,而将他们的和7写在后面,成为:5、6、7、……、94、3、7。
  同理继续,得:7、……、94、3、7、11。
  这样一直进行下去,直到剩下最后一个数为止,求写出的所有数(包括最初的94个数)的和是多少?

呵呵
...全文
96 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunfeng7854 2009-12-12

#include <iostream>
using namespace std;

const int num = 94;

int main(void)
{
int a[2 * num - 1];
int sum = 0;
int i ,iter;
for( i = 0;i < num;i++) a[i] = i + 1;
for( i = 0,iter = num;iter < 2 * num - 1;iter++,i += 2)
{
a[iter] = a[i] + a[i + 1];
}
for( i = 0;i < 2 * num - 1;i++)
{
cout<<a[i]<<" ";
sum += a[i];
}
cout<<endl<<sum<<endl;
return 0;
}

94*2-1个数同楼上,和为33085
回复
120680451 2009-12-11
这是结果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 5
7 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92 93 94 3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 6
7 71 75 79 83 87 91 95 99 103 107 111 115 119 123 127 131 135 139 143 147 151 15
5 159 163 167 171 175 179 183 187 10 26 42 58 74 90 106 122 138 154 170 186 202
218 234 250 266 282 298 314 330 346 362 197 68 132 196 260 324 388 452 516 580 6
44 708 265 328 584 840 1096 1352 593 1424 2448 2017 4465
回复
120680451 2009-12-11
对结果有疑问,可以更改MAX的值变小,验证一下.

#include <stdio.h>
#define MAX 94

int main()
{
long n[2 * MAX] ;//n[1]开始放数据
for(int i = 1; i <= MAX; i++)//初始化
n[i] = i ;
for(i = 1; i < MAX; i++)//运算一次,减少一个数据,所以共运算MAX-1次
n[MAX + i] = n[i * 2 - 1] + n[i * 2] ;
for(i = 1; i < 2 * MAX; i++)//打印
printf ("%d ", n[i]) ;
return 0 ;
}
回复
daidodo 2009-12-11
考虑数列:
S(1,n) = n
S(m,n) = S(m-1,2n-1)+S(m-1,2n)
可以得到:
S(1,1) = 1
S(2,1) = 3
S(3,1) = 10
S(4,1) = 36
S(5,1) = 136
S(6,1) = 528
S(7,1) = 2080

94的2进制表示为(1011110)
1——最高位忽略
0——2080
1——528
1——136
1——36
1——10
0——3
最后结果为:
S = 10 + 36 + 136 + 528 + 1到94的和 * 7 = 31965
回复
ZXW0521 2009-12-11
就是1加到94吗,,,
回复
daidodo 2009-12-11
mark
回复
帅气疯 2009-12-11
[(1+94)*94/2]*94
好像是每次销毁了两个数字的同时生产了一个数字也就是每次销毁1个数字,而每次计算的总数不变,94个数字销毁94次。。。我是这样理解的。
回复
发动态
发帖子
非技术区
创建于2007-09-28

1.5w+

社区成员

C/C++ 非技术区
申请成为版主
社区公告
暂无公告