题意:
对输入内容进行右移操作(最后的值覆盖第一个值)
如:
输入其中的"6"是下方数字的数量,”2“是位移的距离
1 2 3 4 5 6===>5 6 1 2 3 4;(这里每一位都位移了两次)
像输入: 7,3, 1 2 3 4 5 6 7 ===>5 6 7 1 2 3 4
所以便有一下逻辑:
1.一次位移一格,共位移n次
2.注意最后的值会覆盖第一个值
3.需要保持记录要被覆盖的值
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();//获取数字的数量
int len = scanner.nextInt();//获取右移位数
String s = scanner.next()+scanner.nextLine();//获取数字
String[] values = s.split(" ");//按" ",分割成数组
for(int a = 0 ;a<len;a++){//循环要右移的次数(因为这里是一次移动一格分成小部分来多次移动)
String tip = "";//下文有详细讲(主要用来记录将被覆盖的值,方便接下来使用!)
for(int b = 0 ;b<number;b++){//所有值进行一次位移
if((b+1)!=number){//当不为最后一个数时.
if(b==0){//为第一个数则记录第二个数,并以第一个的值覆盖第二个的值.
tip = values[b+1];//记录
values[b+1] =values[b];//覆盖
}else{//不是第一个时,记录后进行覆盖
String temp = tip;//临时用来保存的值(因为这个象排序算法一样,只用两个值无法做到交换!!!)
tip = values[b+1];//记录
values[b+1] = temp;//覆盖
}
}else{//当为最后一个值时,对第一个值进行覆盖即可
values[0] = tip;
}
}
}
for(int a = 0 ;a<number;a++){//打印内容
System.out.print(values[a]+""+(((a+1)==number)?"\n":" "));
}
}
}
tip讲解:
我们做排序算法交换数据时,只有两个变量交换是不够的,所以需要第三个临时变量来参与.
而这里的tip作用就跟数据交换一样.当An要覆盖An+1的数时,如果没有记录An+1的值则会使得An+2没能给An+1原来的值覆盖,而是背An的值覆盖了
如图:
以上就是我所的理解方法,
感谢大家的阅读!!!