给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次....
以此类推..
对下排数组b进行n遍修正(次数n未知),直到求出符合要求的下排数组b
修正过程为:对上排的每个元素a[i],从头对下排进行遍历,求出a[I]在下排出现的次数sum,令b[i]=sum,
对b[i]的赋值会影响到下排数组b中元素的正确性,使用多次遍历修正就好了
使用java实现:
public class number {
public static void main(String[] args) {
int[] a={0,1,2,3,4,5,6,7,8,9};
int[] b={0,0,0,0,0,0,0,0,0,0};
System.out.print("数组a: ");
for (int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println(" ");
update(a,b);
}
//获取a中数字在b中出现的次数
public static int num1(int a[],int b[],int x){
int sum=0;
int array=a[x];
for(int i=0;i<b.length;i++){
if(b[i]==array){
sum++;
}
}
return sum;
}
public static void update(int a[],int b[]){
boolean flag= false;
while (!flag) {
for (int i = 0; i < b.length; i++) {
int sum = num1(a, b, i); //获得a数组中第i个数在b中出现的次数
b[i] = sum; //将次数放入b 数组中
if (inspect(a, b)) {
break;
}
}
flag = inspect(a, b);
}
System.out.print("数组b: ");
for (int i=0;i<b.length;i++){
System.out.print(b[i]+" ");
}
System.out.println(" ");
}
public static boolean inspect(int a[],int b[]) {
boolean result = true;
for (int i = 0; i < b.length; i++) {
int sum = num1(a, b, i);
if (sum != b[i]) {
result = false;
break;
}
}
return result;
}
运行结果: