数组
存放同一种类型数据且长度固定的容器
优点
能够根据数组下标快速访问数组内元素
缺点
后期不能更改数组长度
增加或删除数组内的元素只能创建新的数组进行拼接操作
总结:
查询快增删慢
应用
1:有限数据的排序与查找
2:求吸血鬼数
public class Array {
public static void main(String[] args){
int[] arr = {12,3,45,6,7,8,98,5,74};
travelArray(arr);
sortArray(arr);
travelArray(arr);
System.out.println(findArary(arr,45));
}
//数组遍历
public static void travelArray(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==(arr.length-1)){
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
//数组排序(冒泡升序)
public static int[] sortArray(int[] arr){
int temp = 0;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<(arr.length-i-1);j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
//数组逆序
public static int[] reversedOrder(int[] arr){
int temp = 0;
for(int i=0;i<arr.length/2;i++){
temp = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = temp;
}
return arr;
}
//数组查找(二分)
public static int findArary(int[] arr,int k){
int high = arr.length;
int mid = arr.length/2;
int low = 0;
while(mid>=low){
if(arr[mid] == k){
return mid;
}else if(arr[mid]<k){
low = mid;
}else{
high = mid;
}
mid = (high-low)/2+low;
}
return -1;
}
}
/*
* 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到
* 而这对数字各包含乘积的一半位数的数字
* 其中从最初的数字中选取的数字可以任意排序
* 以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81
*求四位数字的吸血鬼数字
*分析:
*循环遍历四位数
*分离四位数
*随机两两组合,看乘积是否与原数相等
*/
public class Vampire {
public static void main(String[] args) {
//循环遍历四位数
for(int i=1000;i<10000;i++)
{
//分离四位数
int g = i%10;
int s = i/10%10;
int b = i/10/10%10;
int q = i/10/10/10%10;
int[] arr = {g,s,b,q};
//随机两两组合
//排列方式4*3*2*1
f:for(int four=0;four<4;four++){
for(int three=0;three<4;three++){
if(three == four)
continue;
for(int two=0;two<4;two++){
if(two == four||two == three)
continue;
for(int one=0;one<4;one++){
if(one == four||one == three||one == two)
continue;
if(((arr[four]*10+arr[three])*(arr[two]*10+arr[one]))==i){
System.out.println(i);
break f;//i是吸血鬼数,结束本次对i四位数的排列组合
}
}
}
}
}
}
}
}