루오 구 P1147 연속 자연수 및 문제 해결

P1147 연속 자연 번호

제목 설명

주어진 자연수 MM를 들어, 자연수의 모든 연속 세그먼트, 이러한 연속적인 자연 번호와 MM에 대한 세그먼트의 수를 모두 찾을 수 있습니다.

예 : 1998 + 1999 + + 2002 + 2001 2000 = 그래서 19981998-1 자연수 20022002 세그먼트에서 솔루션 10000M = 10000 M의 =이다 = 10000 + 2002 + 2001 + 2000 + 1999 100 001 998.

입력 형식

이 단일 라인 (10 \ 르 M \ 르 2,000,00010≤M≤2,000,000)에 주어진 M의 정수 값을 포함한다.

출력 형식

두 숫자 사이의 공간에 의해 분리 된 두개의 자연수 연속 자연수의 제 지정된 번호 및 조건의 마지막 섹션 번호가 충족되는 각각의 행에, 작은 발 오름차순 제 눌러 모든 출력 라인 대형 주어진 입력 데이터에 대해, 적어도 하나의 해결책이 될 수 있도록.

샘플 입출력

입력 # 1

10000

출력 # 1

18 142
297 328
388 412
1,998 2,002

[생각]

폭력, 열거
가장 간단하고 폭력적인 방법으로 상승세를 원하는 것으로 매우 간단 찾고, 흥미로운 주제
하지만 데이터는 사람들이 다음, 두려움을 느낄 최적화하는 방법에 대해 생각하는 그들의 두뇌를 사용 감히 할 수 있습니다 쉽게입니다 어떻게 복잡성을 줄이기 위해
나는 매우 간단한 주제에 너무 분명했다가,
나는 많은 시간을 보냈다 위의 우수한 솔루션을 원하는
알고 있지만하지 않습니다, 가장 폭력적인 방법 실제로 가장 실현 가능한 방법으로
직접 폭력 열거 1 - N / 2 창 그것을 가능한 간격의 수를 열거 각 번호인지하고
여기에 당신이 n은 N / 2를 열거하는 대신하려는 이유를 말할
당신이 예를 예를의 종류 가지고
있지만, 내부에서, 연속 구간 데이터에서이 질문은, 비록 말하지 때문에를 유추 할 수
없는 출력 샘플 자체 10000--10000이 간격이 없기 때문에, 간격 길이가 1보다 커야
수의 적어도 하나 개의 섹션 2,되도록
하고 2 번 10000 2분의 10,000보다 철자해야 작은 값 또는 동등
이상이 N보다 / 당신 자신 (재미)에 대한 볼 수 있습니다 믿을 수 없어, 두 개의 연속 번호가 n 개의 철자 불가능한 경우 때문에
되도록에만 금 N 개의 내용 / 2가 될 수있는

주석 함께 표시된 코드의 작은 세부 사항이있다

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n; 
    cin >> n;
    int qwq = n / 2;
    int sum = 0;
    for(int i = 1;i <= qwq;++ i)
    {
        sum = 0;
        int j;
        for(j = i;j <= n;++ j)//解释一下这里为什么是n
        //如果输入的数据是偶数的话,那是不会有任何毛病的
        //但是如果你输入的是奇数,拿1919来举例的
        //这个1919 / 2之后等于959.5,这个刚好是有一个可行区间为959 - 960的也就是将两个959.5分配了一下凑出来两个相邻的整数
        //这样如果只枚举到n / 2就是jj掉 
        {
            sum += j;
            if(sum >= n)
                break;
        }
        if(sum == n)cout << i << " " << j << endl; 
    }
    return 0;
} 

추천

출처www.cnblogs.com/acioi/p/11604634.html