华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4070|回复: 18
打印 上一主题 下一主题

二阶等差数列求和

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-4-11 12:20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个题要认真的思考,锻炼逻辑思维,可以让我们的代码变得艺术。
原题求 S=1+2+4+7+****+N
1、N是第x个数
2、N是小于x的最大整数
3、N是大于x的最小整数
输入x,求s。

回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
推荐
 楼主| 发表于 2018-5-4 19:17:23 | 只看该作者
另外一个做法。N是小于x的最大整数,那么意思就是说 while(N<x)就做,按照这个条件,我们来拼出程序
while (N<x)
{
循环体里面应该有三句话,因为有三个变化的,s,n,i 这个经验很重要!!!
}
把 n=n+i,放在最后面,先加,再判断,然后求和 (注意这个顺序!!!)
写成
while (N<x)
{s=s+N;l
N=N+i;
i++;   
}
再拼凑初始值
显然 s=0;
N=1l;
i=1;
所以最后答案
  1. #include <iostream>
  2. using namespace std;
  3. int s,N,i,x;
  4. int main()
  5. {
  6.     cin>>x;
  7.     s=0;N=1;i=1;
  8.     while (N<x)
  9.     {
  10.         s=s+N;
  11.         N=N+i;
  12.         i++;
  13.     }
  14.     cout<<s;
  15.     return 0;
  16. }
复制代码


回复 支持 1 反对 0

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
推荐
 楼主| 发表于 2018-4-30 17:34:29 | 只看该作者
先做第一问吧,首项可以设为0或者1,我一般喜欢设置为0,这样可以适合更大情况,比如N是小于1的最大整数,那就是没有!
找规律:
用i表示目前是第几项,a表示这项的值,s表示总和,那么:
i     a     s
0    0    0
1    1    1
2    2    3
3    4    7
4    7   14
5  11   25
6  16   41
我们假设按照i,a,s的顺序变化,这个也很重要,顺序不一样,结果也会不一样,我一般喜欢直观的变化,i的变化引起a的变化,然后引起s的变化
s=a=0;
for (i=1;i<=10;i++)
  {a=a+i-1;   第i项比前一项大i-1
   s=s+a;
   cout<<a<<s<<endl;  这里检查下中间结果
  }
cout<<s;这个执行的顺序是i变化,判断i是否符合条件,求a,求s,i变化,判断,在求a,求s
但是第2问,是判断a,所以要改动一点
回复 支持 1 反对 0

使用道具 举报

9

主题

11

帖子

47

积分

新手上路

Rank: 1

积分
47
地板
发表于 2018-5-4 19:38:14 | 只看该作者
#include<iostream>
using namespace std;
int s,N,i,x;
int main()
{
    cin>>x;
    s=0;
    N=1;
    i=1;
    while (N<=x)
    {
        s=s+N;
        N=N+i;
        i++;
    }
    s=s+N;
    N=N+i;
    i++;
    cout<<s;
    return 0;
}
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
5#
 楼主| 发表于 2018-5-4 19:51:10 | 只看该作者
上面徐同学的做法很好理解,N<=x就加,那么>x的时候就退出了循环,这个时候再加上N就行了。可是后面的N=N+i;i++就画蛇添足了。
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
6#
 楼主| 发表于 2018-5-4 19:51:14 | 只看该作者
上面徐同学的做法很好理解,N<=x就加,那么>x的时候就退出了循环,这个时候再加上N就行了。可是后面的N=N+i;i++就画蛇添足了。
回复 支持 反对

使用道具 举报

黄昌泰 该用户已被删除
7#
发表于 2018-5-4 19:53:20 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
8#
 楼主| 发表于 2018-5-4 19:54:29 | 只看该作者
其实第三问,我们只要调整一下第二问的解法中,循环里面的语句的顺序就差不多了,我们把N=N+i放在s=s+N的前面,这样当n>x的时候就会把这个N加到s里面去,为了配合这个做法,前面s,N,i的初始值要作相应的改变。
回复 支持 反对

使用道具 举报

胡炜尧 该用户已被删除
9#
发表于 2018-5-4 20:01:35 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

尹泽源 该用户已被删除
10#
发表于 2018-5-4 20:59:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 03:05 , Processed in 0.580115 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表