순환 이동

문제 설명 은 한 그룹의 정 수 를 정 하고 배열 을 이용 하여 이 그룹 수 를 저장 한 다음 에 배열 의 수 순환 이동 을 실현 하도록 요구한다.모두 n 개의 정수 가 있다 고 가정 하면 앞의 각 수의 순 서 를 m 개의 위치 로 뒤로 이동 시 키 고 마지막 m 각 수 를 맨 앞의 m 각 수로 바 꿔 야 한다. *먼저 출력 한 후 m 개 수 를 사용 하지 말고, 다시 출력 하기 전 n - m 개 수 를 사용 하 는 방법 으로 실현 하지 말고, 두 개의 배열 로 실현 하지 마 십시오.하나의 배열 로 만 이 루어 질 것 을 요구 합 니 다. 출력 결과 에서 출력 순서 와 배열 의 순서 가 일치 하도록 해 야 합 니 다. *입력 입력 은 두 줄 이 있 습 니 다. 첫 번 째 줄 은 정수 n 과 정수 m 를 포함 하고 두 번 째 줄 은 n 개의 정 수 를 포함 합 니 다.두 개의 정수 사이 에 빈 칸 으로 나 뉜 다.출력 출력 은 한 줄 이 있 습 니 다. 순환 이동 을 통 해 배열 의 정수 순 서 를 순서대로 출력 하고 두 정수 사 이 를 빈 칸 으로 구분 합 니 다.예제 입력
11 4
15 3 76 67 84 87 13 67 45 34 45

출력 예시
67 45 34 45 15 3 76 67 84 87 13

이것 은 전형 적 인 알고리즘 문제 로 기업 면접 에서 나타 날 확률 이 높다 는 것 을 알려 준다.순환 m 회 매번 한 개의 수 를 이동 하 는 것 을 제외 하고 (이렇게 하면 배열 에 대해 m * n 회 를 조작 해 야 합 니 다) 더 효율 적 인 알고리즘 을 생각 할 수 있 습 니까? (3 * n 회 만 조작 합 니 다)추가 배열 을 사용 하지 않 고 원래 배열 에서 자 리 를 옮 긴 후 순서대로 출력 해 야 합 니 다.소스 코드
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n = 0, m = 0;
    cin >> n >> m;
    vector<int> samle(n);
    for (int i = 0; i < n; i++)
    {
        cin >> samle[i];
    }

    for (int i = 0; i < m; i++)
    {
        int temp = samle[n-1];
        for (int j = 0; j < n-1; j++)
        {
            samle[n-1-j] = samle[n-j-2];
        }
        samle[0] = temp;
    }
    for (int i = 0; i < n; i++)
    {
        if (i != n-1)
        {
            cout << samle[i] << " ";
        }
        else
        {
            cout << samle[i] << endl;
        }
    }
    return 0;
}

좋은 웹페이지 즐겨찾기