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;
}