//法一:分段存储
#include <stdio.h>
int main()
{
int n, m, i;
int a[150];
scanf("%d %d", &n, &m);
m=m%n; //先处理m的值
for (i=1; i<=n-m; i++) scanf("%d", &a[i+m]); //先输入的,存储在数组后半段
for (i=1; i<=m; i++) scanf("%d", &a[i]); //后输入的,存储在数组前半段
for (i=1; i<n; i++) printf("%d ", a[i]); //输出
printf("%d\n", a[n]);
}
//法二:分段输出
#include <stdio.h>
int main()
{
int a[100];
int n, m, i,count=0;
scanf("%d %d", &n, &m);
for (i=0; i<n; i++) scanf("%d", &a[i]); //按顺序将输入的存储到数组中
m= m % n; //先处理m的值
for (i=n-m; i<n; i++) {
printf("%d", a[i]);
count++; //对输出计数
if (count<n) printf(" "); //还没输出完则要打上空格
}
for (i=0; i<n-m; i++) { //第二段输出
printf("%d", a[i]);
count++; //计数接着上一段,不要停
if (count<n) printf(" ");
}
return 0;
}
//法三:循环数组(最优)
#include <stdio.h>
int main()
{
int n, m, i;
int a[105]={0};
scanf("%d %d", &n, &m);
m=m%n; //处理m
for(i=0; i<n; i++) scanf("%d", &a[i]); //存储原数组
for(i=n-m; i<2*n-m-1; i++) printf("%d ", a[i%n]); //循环数组输出
printf("%d", a[(2*n-m-1)%n]);
}
1、循环右移数m可能比总数n大,要取余赋值给m。
2、当对输出有格式要求,考虑分段输入,这样就不用对输出计数了
3、对输出计数,如果没输出完就自加一,即条件为count<n。
4、循环数组的方式在于利用了取余后的数循环出现,参考的是循环队列的模式。