数据结构之数组之吸血鬼数

数组是一种固定长度的数据容器,适用于存储同类型元素。其优势在于能通过下标快速访问元素,但缺点是无法动态调整长度,增删元素效率较低。主要应用于有限数据的排序和查找,例如在寻找吸血鬼数问题中的应用。
摘要由CSDN通过智能技术生成

数组
    存放同一种类型数据且长度固定的容器
优点
    能够根据数组下标快速访问数组内元素
缺点
    后期不能更改数组长度
    增加或删除数组内的元素只能创建新的数组进行拼接操作
总结:
    查询快增删慢
应用
    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四位数的排列组合
							}
						}
					}
				}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值