题目:根据上排给出的十个数,在其下排填出对应的十个数,要求下排每个数都是上排十个数在下排出现的次数
也是在csdn上看到的,上次做的时候愣是看不懂怎么回事,昨晚上在笔记本上又看见了,然后在本子上把排列的情况都画了画,找到了一点规律,大体思路是这样的:下排的数组初始化时的大小应该和上排大小一样,而且默认元素都是0,我就拿上排每个元素在下排数组里找它出现的个数,然后改变下排对应元素的值,依次循环,可以得出下排数组;代码:- /*
- 根据上排给出的十个数,在其下排填出对应的十个数,要求下排每个数都是上排十个数在下排出现的次数
- */
- class GetNextArray
- {
- public static void main(String[] args)
- {
- //System.out.println("Hello World!");
- int[] arr1={0,1,6,3,5,4,2,7,8,9};
- int[] arr2=new int[arr1.length];
- for(int y=0;y<arr1.length;y++)
- {
- for (int x=0;x<arr1.length ;x++ )
- {
- int a=getCount(arr1[x],arr2);
-
- if(arr2[0]==0)
- arr2[0]=a-1;
- else
- arr2[x]=a;
- }
- }
- printArray(arr1);
- System.out.println();
- printArray(arr2);
- }
- //获得每个元素在数组中出现的次数
- public static int getCount(int key,int[] arr)
- {
- int count=0;
- for (int x=0;x<arr.length ;x++ )
- {
- if (key==arr[x])
- count++;
- }
- return count;
- }
- //打印数组
- public static void printArray(int[] arr)
- {
- for (int x=0;x<arr.length ;x++ )
- {
- if(x!=arr.length-1)
- System.out.print(arr[x]+",");
- else
- System.out.print(arr[x]);
- }
- }
- }
复制代码 代码里的第一个for循环的判断条件,我找不到,我把每次排列都列了出来,然后找到了y<arr1.length,说不出原因,但是结果是正确的,如果有人知道,说一下哈;还有这个程序不一定要是十位数,但是只能在五位以上,{0,1,2,3,4}得不出结果,在上面的代码里看不出原因,但是如果把上面代码用while循环的话,我发现其实就是个无限循环,程序无法找到结果,试了很多次,都不行;原题给出的例子是0-9有序数组,我把它顺序打乱了也可以算出来。 |