1つの配列AにはN(>0)個の整数が格納されており、他の配列の使用が許可されていないことを前提として、各整数をM(≧0)個の位置にループし、A中のデータを(A 0 A 1⋯AN−1)から(AN−M⋯AN 1 A 0 A 1⋯AN−M−1)に変換する


1つの配列AにはN(>0)個の整数が格納されており、他の配列を使用することが許されないことを前提として、各整数をM(≧0)個の位置にループし、A中のデータを(A 0 A 1⋯AN−1)から(AN−M⋯ANAN−1 A 1⋯AN−M−1)に変換する(最後のM個の数ループが一番前のM個の位置にシフトする).プログラムがデータを移動する回数を最小限に抑える必要がある場合は、どのように移動方法を設計しますか?(タイトルソースPAT)
入力フォーマット:各入力は1つのテスト例を含み、1行目はN(1≦N≦100)とM(≧0)を入力する.2行目にN個の整数を入力し、間をスペースで区切ります.≪出力フォーマット|Output Format|emdw≫:1行にMビットを右にシフトした後の整数シーケンスを出力します.間はスペースで区切られ、シーケンスの最後に余分なスペースは使用できません.
入力サンプル:6 2 1 2 3 4 5 6出力サンプル:5 6 1 2 3 4
#include
int main()
{
     
    int n,m;
    int i,j;
    int k;
    scanf("%d%d",&n,&m);//n     ,m      ;
    int a[n];   //.cpp       ;
    for(i=0;i<n;i++)
    {
     
        scanf("%d",&a[i]);
    }
    for(j=0;j<m;j++)   //  m ,                 
    {
     
        k=a[n-1];  //   ,         ,             ,        。
        for(i=n-1;i>0;i--)
        {
     
            a[i]=a[(i-1+n)%n];
        }
        a[0]=k;
    }
    for(i=0;i<n;i++)    //      ,            ,           
    {
     
        if(i==n-1) 
        	printf("%d",a[i]);
        else
            printf("%d ",a[i]);
    }    
    printf("
"
); return 0; }