자체 측정 - 3 배열 요소 순환 오른쪽 이동 문제 (20 분)

제목: 한 배열 A 에 N (> 0) 개의 정수 가 존재 합 니 다. 다른 배열 을 사용 할 수 없 는 전제 에서 모든 정 수 를 오른쪽으로 이동 M (≥ 0) 개의 위치 로 순환 시 키 고 A 중의 데 이 터 를 (A 0 A 1 - A N - 1) 에서 (A N - M - A N - 1 A 0 A 1 - A 1 - 1 A 1 - A - N - M - 1) 로 변환 합 니 다.(마지막 M 개 수 는 맨 앞 에 있 는 M 개 위치 로 순환 합 니 다.) 프로그램 이 데 이 터 를 이동 하 는 횟수 를 최대한 적 게 고려 해 야 한다 면 이동 하 는 방법 을 어떻게 설계 해 야 합 니까?
입력 형식: 각 입력 은 테스트 용례 를 포함 하고, 첫 번 째 줄 은 N (1 ≤ N ≤ 100) 과 M (≥ 0) 을 입력 하 며, 두 번 째 줄 은 N 개의 정 수 를 입력 하고, 사 이 를 빈 칸 으로 구분한다.
출력 형식: 한 줄 에서 출력 순환 오른쪽 M 비트 이후 의 정수 시퀀스 를 출력 합 니 다. 사 이 를 빈 칸 으로 구분 합 니 다. 시퀀스 끝 에 빈 칸 이 있 으 면 안 됩 니 다.
입력 예시:
6 2 1 2 3 4 5 6
출력 예시:
5 6 1 2 3 4
문제 풀이 방향: 우선, 2 개의 1 차원 배열 을 정의 합 니 다. 하 나 는 콘 솔 에서 입력 한 숫자 를 저장 하고 다른 하 나 는 이동 한 숫자 를 저장 합 니 다. 또한 함수 int zhuanhuan (int a, int b, int c) 을 정의 합 니 다.임의의 그룹 a 개의 숫자 를 계산 하 는 데 사용 합 니 다. b 번 째 위치 에 있 는 숫자 를 오른쪽으로 c 번 이동 한 후의 새로운 위 치 를 계산 합 니 다. 이동 한 후에 새로운 그룹 을 채 우 고 출력 하면 됩 니 다.
#include 
#include 

int main()
{
     
    int a,b,i,j;
    scanf("%d %d",&a,&b);
    int c[100];
    int d[100]={
     0};
    for(i=0;i<a;i++)
    {
     
        scanf("%d",&c[i]);
    }
    for(i=0;i<a;i++)
    {
     
        d[zhuanhuan(a,i+1,b)-1]=c[i];//                 
    }
    printf("%d",d[0]);
    for(i=1;i<a;i++)
    {
     
        printf(" %d",d[i]);
    }
    return 0;

}
int zhuanhuan(int a,int b,int c)//         、      、    ---》        
{
     
    if(b+c<=a)//     +     
    {
     
            return b+c;
    }
    else if(b+c>a&&(b+c)%a==0)//     +     
    {
     
        return a;
    }

    else if(c>a&&c%a==0)//     >          %  ==0
    {
     
        return b;
    }
    else
    {
     
        return (b+c)%a;//   :     
    }
}

좋은 웹페이지 즐겨찾기