zoukankan      html  css  js  c++  java
  • 连续自然数和(codevs 1312)

    题目描述 Description

    对于一个自然数M,求出所有的连续的自然数段,使得这些连续自然数段的全部数字和为M.
    eg:1998+1999+2000+2001+2002=10000,所以从1998到2002的一个自然数段为M=10000的一个解。 

    输入描述 Input Description

    一个数M

    输出描述 Output Description

    每行两个数,为连续自然数段的一头一尾,所有输出行的第一个数按照升序排列

    样例输入 Sample Input

    10000

    样例输出 Sample Output

    18 142

    297 328

    388 412

    1998 2002

    //优化真的很难想啊
    #include<cstdio>
    #include<iostream>
    #define M 1000010
    using namespace std;
    int a[M];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          a[i]=i+a[i-1];
        int tmp=2;
        for(int i=1;i<=n/2+1;i++)
          for(int j=i+1;j<=n/2+1;j++)
            if(a[j]-a[i-1]==n)
            {
                printf("%d %d
    ",i,j);
                tmp=j;
                break;
            }
            else if(a[j]-a[i-1]>n)break;
        return 0;
    }
    View Code
  • 相关阅读:
    Go语言string,int,int64 ,float转换
    Go 时间相关
    静态顺序表操作
    汇编基础
    C语言字节对齐
    BugkuCTF-游戏过关
    数组越界问题分析
    选择排序(Java)
    杨辉三角(C语言)
    二分查找(Java)
  • 原文地址:https://www.cnblogs.com/harden/p/5640697.html
Copyright © 2011-2022 走看看