黑马程序员技术交流社区

标题: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数... [打印本页]

作者: jeasonlzy    时间: 2015-3-15 14:16
标题: 有n个整数,使其前面各数顺序向后移m个位置,最后m个数...
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. }
复制代码




作者: zhqw_heima    时间: 2015-3-15 14:26
再第一行添加import java.util.Scanner,后面的代码都是对的,可以实现那个功能
作者: fantacyleo    时间: 2015-3-15 15:04
通过一个简单的数学变换可以实现快速移位:
设原数组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];
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2