본문 바로가기
카테고리 없음

백준 1024 c++ "수열의 합" -PlusUltraCode-

by PlusUltraCode 2025. 5. 26.

https://www.acmicpc.net/problem/1024

 

[필자 사고]

수학문제이다.

먼저 문제에서 요구하는 수열의 수식을 구하는 과정이 필요하다.

a + a+1 + a+2 ... 라고 했을시 La + L(L-1)/2 와 같은 식을 얻을수 있다. 

N = La + L(L-1)/2 를 이용하여 문제를 해결하면 쉽게 해결할 수 있따. 

 

아래는 자세한 코드해설이다.

[코드 해설]

main()

이 함수는 프로그램의 시작점으로, 두 개의 정수 N과 L을 입력받습니다. N은 만들고자 하는 수이고, L은 만들 수열의 최소 길이입니다. 이후 수열의 길이를 L부터 100까지 증가시키며, 각 길이마다 해당 수열이 존재할 수 있는지 판단합니다.

각 수열 길이에 대해, 해당 길이의 수열이 존재하려면 수열의 시작 숫자가 자연수여야 하며, 연속된 수들의 합이 정확히 N이 되어야 합니다. 이를 만족하는 수열을 찾으면 바로 그 수열을 출력하고 프로그램을 종료합니다. 만약 끝까지 찾지 못하면 -1을 출력하여 불가능함을 알립니다.

[소스 코드]

#include <iostream>

using namespace std;
int N, L;
int main(void) {
	cin >> N >> L;

	for (int i = L; i <= 100; i++) {
		int l = (i - 1) * i / 2;
		int n = N - l;

		if (n < 0)continue;

		if (n % i == 0) {
			int start = n / i;
			while (i--) {
				cout << start++ << " ";
			}
			return 0;
		}
	}
	cout << -1;
}