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
入力フォーマット:各入力は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;
}