Java SE 常见逻辑思维题

以下是大家在学习Java SE 的时候经常遇到的逻辑思维题##

	// 运算s=a+aa+aaa+aaaa+aa...n个a的结果
	public static int getS(int x, int n){
		int fang = 1;
		int sum = 0;
		int sum1 = 0;
		
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= i; j++) {
				fang = fang*10;
				sum = sum + x*fang/10;
				
			}
			sum1 = sum1 + sum;
			System.out.print(sum + " ");
			fang = 1;
			sum = 0;
		}
		
		return sum1;
	}
	
	
	
	
	// 计算水仙花数
	public static boolean isShuiXianHua(int n) {
		int i, y;
		int sum = 0;
		
		y = n;
		while(n!=0){
			i = n%10;//获取每位数字
			n = n / 10;
			sum = sum + i*i*i;
		}
		if (sum == y) {
			return true;
		}
		
		return false;
	}
	
	
	
	// 1 + 1/2 - 1/3 + 1/4 - 1/5 + ... 的前n项和
	public static double getQianNHe(int n){
		double sum = 0;
		double x = 0;
		
		for (int i = 1; i <= n; i++) {
			x = 1/(double)(i*2-1);
			if (i%2==1) { 
				sum = sum + x;
			}else{
				sum = sum - x;
			}
		}
		
		return sum;
	}
	
	
	
	
	// 计算1!+2!+...+n!的和
	public static int getLeiJieCheng(int n){
		int sum = 0;
		int cheng = 1;

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= i; j++) {
				cheng = cheng*j;
			}
			sum = sum + cheng;
			cheng = 1;
		}

		return sum;
	}
	
	
	
	// 判断一个年份是否为闰年
	public static boolean isLeaPYear(int year){
		if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
			return true;
		}else{
			return false;
		}
	}
	
	

	// 输入一个日期如:2017-08,输出当前月份的天数
	private static int getSumDays(int year,int month,int day){
		int[] a= {0,31,29,31,30,31,30,31,31,30,31,30,31};// 闰年每月天数
		int[] b= {0,31,28,31,30,31,30,31,31,30,31,30,31};// 平年每月天数
		int sumDays = 0;
		for (int i = 0; i < month; i++) {
			if (isLearYear(year)) { // 判断是否闰年
				sumDays += a[i];
			}else{
				sumDays += b[i];
			}
		}
		
		return (sumDays + day);
	}
	
	

	// 获取一个随机生成自定义长度的字符串
	public static String getRandomString(int length){
		char[] ch = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
		Random rand = new Random();
		StringBuffer buf = new StringBuffer();
		
		for (int i = 0; i < length; i++) {
			buf.append(ch[rand.nextInt(ch.length)]);
		}
		
		return buf.toString();
	}
	
	
	
	// 分解质因数
	public static void getNumber(int number){
        int a = 2;
        System.out.print(number + "=");
        while(number > a){
            if(number % a == 0){
                System.out.print(a + "*");
                number = number / a;
            }else{
                a++;
            }
        }
      
        System.out.print(a);
    }

	
	
	
	// 计算number中包含digit的个数
	public static int countdigit(int number, int digit){
		int index = 0;
		int count = 0;
		while(number != 0){//number不为0
			index = number % 10;
			number = number / 10;
			if (index == digit) {//如果当前位数为digit
				count++;
			}
		}
		return count;
	}
	
	
	
	// 打印金字塔数字
	public static void printPyramid(int n){
		//确定要打印多少行
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n-i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= i; j++) {
				System.out.print(i + " ");
			}
			System.out.println();
		}
	}
	
	
	
	//ֱ插入排序算法
	public static void insertSort(int[] arr){
		
		for (int i = 1; i < arr.length; i++) {
			int m = i; 
			while(m > 0 && arr[m] < arr[m - 1]){ 
				int temp = arr[m];
				arr[m] = arr[m - 1];
				arr[m - 1] = temp;
				m--; 
			}
		}
	}

	
	
	
	//冒泡排序
	public static void maopaoSort(int[] arr){
		
		for (int i = 1; i < arr.length; i++) {
			for (int j = 0; j < arr.length - i; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
	
	
	
	//二分查找
	public static int binnarySearch(int[] arr, int x, int min, int max){
		
		if (min > max) {
			return 0;
		}
		
		int mid = (min + max) / 2;
		
		if (arr[mid] == x) {
			return mid;
		}else if (arr[mid] >= x) {
			return binnarySearch(arr, x, min, mid - 1);
		}else{
			return binnarySearch(arr, x, mid + 1, max);
		}
	}
	
	
	
	//打印杨辉三角
	public static void printYangHui(int n){
		int [][] iArray = new int[n][];
          
        for(int i=0;i<n;i++) {
            iArray[i] = new int[i+1];
            
            for(int j=0;j<=i;j++) {
                if(j==0 || j==i) {
                    iArray[i][j]=1;
                    System.out.print(iArray[i][j]+"    ");
                }else{
                    iArray[i][j]=iArray[i-1][j]+iArray[i-1][j-1];
                    System.out.print(iArray[i][j]+"    ");
                }
            }
            System.out.println();
        } 
	}
	
	
	
	
	//逆序输出一个整数
	public static int[] niXu(int[] args){
		int[] a = new int[args.length];

		for (int i = 0, j = a.length-1; i < args.length && j >= 0; i++,j--) {
			a[j] = args[i];
		}
		
		return a;
	}

	
	
	
	// 将字符串变成数字(类似paseInt)
	public static int change(String str){
		int sum = 0;
		for (int i = 0; i < str.length(); i++) {
			sum = sum + (str.charAt(i) - 48);
			sum = sum * 10;
		}
		
		return sum/10;
	}

	
	
	
	// 逆序输出一个正整数
	public static int reverse(int number){
		int sum = 0;
		int index = 0;
		
		while(number != 0){
			index = number%10; 
			sum = sum + index; 
			sum = sum*10; 
			number = number/10;
		}
		
		return sum/10;
	}
	
	
	
	// 判断number的各位数的立方之和是否等于自身
	public static boolean is(int number){
		int x = number;
		int sum = 0;
		int index = 0;
		while (x!=0) {
			index = x%10;
			x = x / 10;
			sum = sum + index*index*index;
		}
	
		if (number == sum) {
			return true;
		}else{
			return false;
		}
	}
	
	
	
	// 计算x的约数之和
	public static int factorsum(int x){
		int sum = 0;
		
		//除了本身之外的可以被整出的为其约数
		for (int i = 1; i <= x/2; i++) {
			if (x % i == 0) {
				sum = sum + i;
			}
		}
		
		return sum;
	}
	
	
	
	// 递归算法获取斐波那契数
	public static int getFib(int n) {
		if (n == 1 || n == 2) {
			return 1;
		}	
		return (getFib(n - 1) + getFib(n - 2));
	}
	
	
	
	// 获取斐波那契数
	public static int[] getFibArray(int n){
		int[] aa = new int[n];
		//计算斐波那契数
		for (int i = 0; i < aa.length; i++) {
			if (i == 0 || i == 1) {
				aa[i] = 1;
			}else{
				aa[i] = aa[i - 1] + aa[i - 2];
			}
		}
		
		for (int i = 0; i < aa.length; i++) {
			System.out.println(aa[i]);
		}
		
		return aa;
	}
	
	
	
	
	// 打印数字n围成的棱形
	public static void printLengXing(int n) {
		// TODO Auto-generated method stub
		// 打印上半部分
		for(int i = 1; i <= n; i++){
			if(i == 1){
				for (int j = 1; j <= n - i; j++) {
					System.out.print(" ");
				}
				System.out.println(n);
			}else{
				for (int j = 1; j <= n - i; j++) {
					System.out.print(" ");
				}
				System.out.print(n);
				
				for(int j = 1; j <= 2 * (i - 1) - 1; j++){
					System.out.print(" ");
				}
				System.out.println(n);
			}
		}
		
		// 打印下半部分
		for(int i = n - 1; i >= 1; i--){
			if(i == 1){
				for (int j = 1; j <= n - i; j++) {
					System.out.print(" ");
				}
				System.out.println(n);
			}else{
				for (int j = 1; j <= n - i; j++) {
					System.out.print(" ");
				}
				System.out.print(n);
				
				for(int j = 1; j <= 2 * (i - 1) - 1; j++){
					System.out.print(" ");
				}
				System.out.println(n);
			}
		}
		
	}
		
	
	
	
	// 判断一个整数有多少个不相等的数字
	public static int getSame(int x) {
		// TODO Auto-generated method stub
		HashSet<Integer> hs = new HashSet<Integer>();
		int index = 0;
		while (x != 0) {
			hs.add(x % 10);
			x = x / 10;
		}
		
		return hs.size();
	}
	
	
	
	//判断是否是回文数
	public static boolean isHuiWen(int x){
		String strX = x + "";
		
		for (int i = 0; i < strX.length(); i++) {
			if (strX.charAt(i) != strX.charAt(strX.length() - i - 1)) {
				return false;
			}
		}
		
		return true;
	}
	
	
	
	// 判断是否为素数
	public static boolean isPrime(int x) {
		// TODO Auto-generated method stub
		for(int i = 2; i < x; i++){
			if(x % i == 0){
				return false;
			}
		}
		
		return true;
	}
	
	
	
	// 计算一个正整数的下标之和
	public static int getIndexSum(int x) {
		// TODO Auto-generated method stub
		int sum = 0;
		int index;
		while(x!=0){
			index = x % 10;
			x = x / 10;
			sum += index;
		}
		
		return sum;
	}

感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值