黑马程序员技术交流社区

标题: 还有简便的方法吗?(有n个整数,使其前面各数顺序...) [打印本页]

作者: Zomu_文林    时间: 2014-12-17 01:23
标题: 还有简便的方法吗?(有n个整数,使其前面各数顺序...)
/*
题目:有n个整数,使其前面各数顺序向后移m个位置, 最后m个数变成最前面的m个数
*/
/*方法一
************************************/
public class TestDemo2{
public static void main(String[] args) {
   int[] a = {1,2,3,4,5,6,8,9,5,4,6,2};//随便定义了一个数组
   int N = a.length;
   int m = 2;//移的位数
   int[] b = new int[m];
   for(int i=0; i<m; i++) {
    b[i] = a[N-m+i];
   }
   for(int i=N-1; i>=m; i--) {
   a[i] = a[i-m];
   }
   for(int i=0; i<m; i++) {
    a[i] = b[i];
   }
System.out.print("位移后的数组是:");
   for(int i=0; i<N; i++) {
    System.out.print(a[i] + " ");
   }
}
}

/*方法二
************************************/
public class TestDemo{
        public static void main(String[] args){
                int m= 2;//移的位数
                int[] in={1,2,3,4,5,6,8,9,5,4,6,2};//随便定义了一个数组
                int[] i= new int[in.length];
                for(int j= 0;j<in.length;j++){
                        i[(j+m)%(in.length)]=in[j];
                        }
                for(int j= 0;j<in.length;j++){
                System.out.println(i[j]);
}


作者: 赵越海    时间: 2014-12-17 05:06
本帖最后由 赵越海 于 2016-7-8 17:40 编辑

         .
作者: as604049322    时间: 2014-12-17 05:51
题目:有n个整数,将前面n-m个数与后面m个数交换位置。。我可以这么理解题目吗?
作者: as604049322    时间: 2014-12-17 06:15
  1. class ArrayMove
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         int[] in={1,2,3,4,5,6,8,9,5,4,6,2};
  6.         printArr(moveArr(in,2));
  7.     }

  8.     public static int[] moveArr(int[] arr,int m){
  9.         //arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  10.         int n=arr.length;
  11.         int[] result=new int[n];
  12.         System.arraycopy(arr,n-m,result,0,m);
  13.         System.arraycopy(arr,0,result,m,n-m);
  14.         return result;
  15.     }
  16.     public static void printArr(int[] arr){
  17.                 System.out.print("[");
  18.                 for(int i=0;i<arr.length;i++){
  19.                         if(i!=arr.length-1) System.out.print(arr[i]+",");
  20.                         else System.out.print(arr[i]+"]");
  21.                 }
  22.                 System.out.println();
  23.         }
  24. }
复制代码

作者: 彭旭文    时间: 2014-12-17 23:42
方法很妙...学习了!
作者: Zomu_文林    时间: 2014-12-17 23:52
as604049322 发表于 2014-12-17 05:51
题目:有n个整数,将前面n-m个数与后面m个数交换位置。。我可以这么理解题目吗?  ...

不能这么理解吧。题目的意思我的理解是循环移位...
作者: quick3g    时间: 2014-12-18 01:14
本帖最后由 quick3g 于 2014-12-19 00:20 编辑
复制代码

总结一下:
  1. import java.util.Arrays;


  2. public class MoveArr {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                  int m= 2;//移的位数
  8.          int[] in={1,2,3,4,5,6,8,9,5,4,6,2};//随便定义了一个数组
  9.         // int[] i= moveArray(in,m);
  10.          //int[] i= moveArray2(in,m);
  11.          int[] i= moveArray3(in,m);
  12.          System.out.println(Arrays.toString(i));

  13.         }
  14.         public static int []  moveArray1(int arr[],int n){
  15.                  int[] newArr= new int[arr.length]; //new一个新的数组
  16.          for(int j= 0;j<arr.length;j++){
  17.                          newArr[(j+n)%(arr.length)]=arr[j];
  18.          }
  19.          return newArr;
  20.         }
  21.         public static int []  moveArray2(int arr[],int n){
  22.                   int[] tempArr = new int[n];//保存需要移动的元素
  23.                   for(int i=0; i<n; i++) {
  24.                            tempArr[i] = arr[arr.length-n+i];
  25.                    }
  26.                   //原数组元素右移
  27.                   for(int i=arr.length-1; i>=n; i--) {
  28.                     arr[i] = arr[i-n];
  29.                    }
  30.                   for(int i=0; i<n; i++) {
  31.                     arr[i] = tempArr[i];
  32.                    }
  33.                   return arr;
  34.         }
  35.         //使用系统arraycopy函数
  36.     public static int[] moveArray3(int[] arr,int n){
  37.         int len=arr.length;
  38.         int[] result=new int[len];
  39.         System.arraycopy(arr,len-n,result,0,n);
  40.         System.arraycopy(arr,0,result,n,len-n);
  41.         return result;
  42.     }

  43. }
复制代码




作者: 李天富    时间: 2014-12-18 02:54
  1. package test1;

  2. import java.util.LinkedList;

  3. public class MoveNum {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                 // TODO Auto-generated method stub
  9.                 int[] in = { 3, 6, 8, 9, 4, 1, 3, 8, 0 };
  10.                 int m = 3;

  11.                 moveNum(in, m);
  12.         }

  13.         public static void moveNum(int[] in, int m) {
  14.                 LinkedList<Integer> lin = new LinkedList<Integer>();
  15.                 for (int i = 0; i < in.length; i++) {
  16.                         lin.add(in[i]);
  17.                 }
  18.                 for (int i = 0; i < m; i++) {
  19.                         int temp = lin.pollLast();
  20.                         lin.addFirst(temp);
  21.                 }
  22.                 System.out.println(lin);
  23.         }

  24. }
复制代码

作者: as604049322    时间: 2014-12-18 07:50
Zomu_文林 发表于 2014-12-17 23:52
不能这么理解吧。题目的意思我的理解是循环移位...

我的代码的答案和你的一样,而且比你的简单的多




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