https://www.acmicpc.net/problem/1024
1024번: 수열의 합
첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
www.acmicpc.net
초항을 i라 하고 합 N, 길이 L이라고 하면, i를 N와 L의 수식으로 표현할 수 있다.
문제의 핵심은 L값을 증가시키면서 초항 i가 0이상인 정수일 경우를 찾는 것이다. 아닐 경우는 그냥 -1을 출력하면 된다.
계산하면 i=N/L-(L-1)/2이므로, 이를 바탕으로 조건문을 잘 설정해주자.
코드는 다음과 같다.
#include <cstdio>
int main(void){
int N, L;
scanf("%d %d",&N, &L);
while(L<=100){
if((2*N-L*L+L)%(2*L)==0 && (2*N-L*L+L)/(2*L)>=0)
break;
else
L++;
}
if(L<=100){
for(int i=N/L-(L-1)/2; i<=N/L-(L-1)/2+L-1; i++)
printf("%d ",i);
}
else{
printf("-1");
}
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 5623번] 수열의 합 (Silver 5) (0) | 2020.07.02 |
---|---|
[C/C++ 백준 1448번] 삼각형 만들기 (Silver 3) (0) | 2020.07.02 |
[C/C++ 백준 1614번] 영식이의 손가락 (Silver 1) (0) | 2020.06.07 |
[C/C++ 백준 1041번] 주사위 (Silver 1) (0) | 2020.06.06 |
[C/C++ 백준 1138번] 한 줄로 서기 (Silver 1) (0) | 2020.06.04 |