도현은 총 N개의 바구니를 가지고 있고, 각각의 바구니는 1부터 N까지 순차적으로 번호가 매겨져 있다. 바구니를 N번째 바구니라고 합니다.
도현은 앞으로 바스켓 M의 순서를 바꾸려고 한다. 도현은 바구니의 순서를 로테이션할 때 순서를 로테이션할 범위를 설정하고 그 범위 내에서 표준 바구니를 선택한다. 도현이 선택한 바구니의 범위가 begin, end이고, 기준 바구니가 mid, begin, begin+1, …, mid-1, mid, mid+1, …, end-1 인 경우, end 순으로 바스켓이 mid, mid+1, …, end-1, end, begin, begin+1, …, mid-1로 변경됩니다.
바구니 회전 방법이 주어졌을 때 바구니 번호 M을 회전시킨 다음 가장 왼쪽 바구니부터 시작하여 바구니에 적힌 번호를 표시하는 프로그램을 작성하십시오.
입력
첫 번째 줄에는 N(1 ≤ N ≤ 100) 및 M(1 ≤ M ≤ 100)이 제공됩니다.
두 번째 라인부터는 M 라인에 순서를 바꾸는 바구니 만드는 방법이 주어집니다. 이 방법은 i, j, k로 표현되며 i번째 바구니의 순서를 왼쪽에서 j번째 바구니로 회전하므로 표준 바구니가 k번째 바구니임을 의미합니다. (1≤i≤k≤j≤N)
도현은 입력으로 주어진 순서대로 바스켓의 순서를 회전시킨다.
인쇄
모든 주문을 회전시킨 후 가장 왼쪽 바스켓부터 시작하여 공백으로 구분하여 바스켓에 적힌 주문을 출력합니다.
예제 입력 1 복사
10 5
1 6 4
3 9 8
2 10 5
1 3 3
2 6 2
예제 출력 1 복사
1 4 6 2 3 7 10 5 8 9
N 바구니의 위치를 M 번 바꾸도록 요청하십시오. 기준은 두 번째 행의 i, j, k를 사용하여 k를 기준으로 i에서 j까지의 위치에 바구니를 열고 오른쪽에 배치하는 것 같습니다.
ex) i = 1, j = 5, k = 3이라고 합시다.
1 2 3 4 5 <- k인 3에서 오른쪽에 있는 녀석을 왼쪽으로 밀고, 밀린 1, 2개의 녀석을 오른쪽으로 옮깁니다.
3 4 5 1 2 <- 위의 결과
제 실력으로는 한번에 다 하기가 어려워서 하나씩 해결했습니다.
1. 바구니 1에서 N까지 인쇄
2. i, j, k에 대한 입력코드를 M회 작성
3. i에서 k까지의 숫자를 임시로 저장하는 코드 작성(동적 배열 사용)
3. k에서 j에서 i까지의 숫자를 덮어씁니다.
4. 임시로 저장된 숫자를 뒤에 덮어쓰기 -End- (동적배열을 썼기 때문에 메모리 해제를 추가했습니다)
아래는 코드입니다
|
1
2
삼
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#포함하다 <iostream>
사용 네임스페이스 성병;
정수 기본()
{
정수 알(101);
정수 엔, 엠;
친 >> N >> 중;
~을 위한(정수 나 = 1; 나 <= N; 나++)
{
도착(i) = 나;
}
~을 위한(정수 엑스 = 0; 엑스 < 중; 엑스++)
{
정수 나는, j, k;
친 >> 나 >> 제이 >> 케이;
정수 *온도 = 새로운 정수(케이 – 나);
~을 위한(정수 와이 = 0; 와이 < 케이 – 나; 와이++)
{
온도(y) = 알(나는 + 와이);
}
~을 위한(정수 와이 = 케이; 그리고 <= 제이; 거기++)
{
알(나는 + 와이 – 케이) = 도착(y);
}
~을 위한(정수 와이 = 0; 와이 < 케이 – 나; 와이++)
{
알(나는 + 제이 – 케이 + 1 + 와이) = 온도(y);
}
삭제() 온도;
}
~을 위한(정수 나 = 1; 나 <= N; 나++)
{
쿠우트 << 도착(i) << ” “;
}
반품 0;
}
|
CS |
내 머리를 풀어주는 흥미로운 문제였습니다.