A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数   
大家看看这样写 对不对。。


  1. public classYiDong {
  2. public static void main(String[] args) {
  3.    int N =10;
  4.    int[] a = new int[N];
  5.    Scanner s = new Scanner(System.in);
  6.    System.out.println("请输入10个整数:");
  7.    for(int i=0; i<N; i++) {
  8.     a[i] = s.nextInt();
  9.    }
  10.    System.out.print("你输入的数组为:");
  11.    for(int i=0; i<N; i++) {
  12.      System.out.print(a[i] + " ");
  13.    }
  14.    System.out.print("\n请输入向后移动的位数:");
  15.    int m = s.nextInt();
  16.    int[] b = new int[m];
  17.    for(int i=0; i<m; i++) {
  18.     b[i] = a[N-m+i];
  19.    }
  20.    for(int i=N-1; i>=m; i--) {
  21.    a[i] = a[i-m];
  22.    }
  23.    for(int i=0; i<m; i++) {
  24.     a[i] = b[i];
  25.    }
  26. System.out.print("位移后的数组是:");
  27.    for(int i=0; i<N; i++) {
  28.     System.out.print(a[i] + " ");
  29.    }
  30. }
  31. }
复制代码



2 个回复

倒序浏览
再第一行添加import java.util.Scanner,后面的代码都是对的,可以实现那个功能
回复 使用道具 举报
通过一个简单的数学变换可以实现快速移位:
设原数组a有n个元素,每个元素向前移动m位,最后m个数变成最前面的m个数。则新建一个长度为n的空数组b,原数组元素a[i ]在数组b中的下标为:(i + m) % n
例如n=10, m=3,则a[0]在b中下标为(0+3) % 10 = 3,a[7]在b中下标为(7+3) % 10=0
这样移位操作只需要一条语句:
  1. for(i=0;i<a.length;i++)
  2.     b[(i+m)%n]=a[i];
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马