算法训练 连续正整数的和

来源:互联网 发布:程序员用机械键盘推荐 编辑:程序博客网 时间:2024/05/29 08:45

  算法训练 连续正整数的和  

时间限制:1.0s   内存限制:256.0MB

    

问题描述

78这个数可以表示为连续正整数的和,1+2+3+...+12,18+19+20+21,25+26+27。
  输入一个正整数 n(<=10000)
  输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n。
  对于多种表示法,a小的方案先输出。

样例输入

78

样例输出

1 12
18 21
25 27

分析:首先想到的是写一个函数fx用于求first到last之间所有连续正整数的和,当和等于题目输入n时,就输出相应的first和last值。

int fx(int f,int l)//求first到last所有连续数字之和{    int sum=0;    if(f>l)        return sum;    else        sum+=fx(f+1,l)+f;}
想到递归在数据很大的时候会特别的慢,又用循环写了fx函数

int fx(int f,int l)//求first到last所有连续数字之和{    int sum=0;    while(f<=l)    {        sum+=f;        f++;    }    return sum;}

主函数:

#include <stdio.h>int main(){    int n;    scanf("%d",&n);    int i,j;    for(i=1; i<n/2; i++)        for(j=i+1; j<n/2; j++)            if(fx(i,j)==n)                printf("%d %d\n",i,j);    return 0;}

但是这样时间上还是过不了的。

换个思路:用a[]数组存储前n项和,比如a[i]存储1到i的和。

那么只需a[j]-a[i]==n,对应的i和j即为满足条件的输出。


#include <stdio.h>int a[10001];int main(){    int n;    scanf("%d",&n);    int i,j;    a[0]=0;    for(i=1; i<=n; i++)        a[i]=a[i-1]+i;//a[i]为前i项和    for(i=1; i<n-1; i++)        for(j=i+1; j<=n; j++)        {            if(a[j]-a[i]==n)//i和j之间数的和等于n                printf("%d %d",i,j);            else if(a[j]-a[i]>n);//重要剪枝,继续只会越加越大            break;        }}

#include <stdio.h>int a[10001];int main(){    int n;    scanf("%d",&n);    int i,j;    a[0]=0;    for(i=1; i<=n; i++)        a[i]=a[i-1]+i;//a[i]为前i项和    for(i=0; i<=n-2; i++)//注意i从0开始        {            for(j=i+1; j<=n; j++)        {            if(a[j]-a[i]==n)//i和j之间数的和等于n                printf("%d %d\n",i+1,j);            else if(a[j]-a[i]>n)//重要剪枝,继续只会越加越大            break;        }        }        return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 水泡破了化脓了怎么办 泰迪口臭很严重怎么办 狗狗的嘴巴好臭怎么办 2岁宝宝有口臭怎么办 2岁半宝宝口臭怎么办 胃热引起的口臭怎么办 脑梗右手不能动怎么办 脑梗右手不灵活怎么办 冒冷汗头晕想吐怎么办 脸中风嘴歪了怎么办 耳朵里疱疹破了怎么办 吃了变质的米饭怎么办 吃了变质的蛋糕怎么办 吃了变质的饭怎么办 颈椎病犯了头晕恶心怎么办 感冒引起的耳朵疼怎么办 感冒了左耳朵疼怎么办 受风引起的面瘫怎么办 两边的脸不一样大怎么办 脖子扭到怎么办快速好 卡马西平片过量怎么办 天冷眼睛神经跳怎么办 每天失眠怎么办要疯了 老是失眠是怎么办才好 汗毛又多又长怎么办 脸上出油毛孔粗大黑头怎么办 毛长在皮肤里怎么办 腰韧带拉伤怎么办恢复快 脚扭伤伤了韧带怎么办 膝关节韧带拉伤怎么办恢复快 脚踝韧带拉伤怎么办恢复快 脚扭伤一年没好怎么办 脚扭伤半年还疼怎么办 脚崴过有后遗症怎么办 脚扭伤脚面肿了怎么办 腰突然扭了好痛怎么办 腰扭伤了怎么办最有效 腰扭伤了不能动怎么办 前交叉韧带增粗怎么办 膝盖前交叉韧带损伤怎么办 狗的腿肌肉拉伤怎么办