【阿里21校招笔试题】【日常生活】【BUG日记】我真是个呆瓜!居然不会写冒泡排序了,我吐了!结果阿里的校招笔试题一题都没做好!!!我人真的傻了!就卡在排序上!!!

【记录】:记录一次呆瓜日记,自己真是一个大傻子。
【经过】:今天晚上在做阿里校招的笔试题的时候,我人傻了。固定一个小时,做两道编程题,结果第一题都没做完。
【题1】:(只记得大概需求)输入一个数n,再输入n个数,在这n个数中,能被平方整除的,就过,不能整除的就算最小差值并且记录下来。最后整除的数值里达到一半的就不用算最小差值总和。如果缺多少个整除数的,就输出这个所有最小差值的总和。
【样例】:

输入(第一行):4
输入(第二行):4 7 12 13
输出:2

【当时写的答案】:

我当时写的排序(我真是个弱智):
在这里插入图片描述

【个人答案】(不标准,还是笔者自己写的,很烂,口下留情):

package com.exam.alibaba;

import java.util.Scanner;

public class Main {
    
    
	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		int n = 0;
		n = in.nextInt();
		int a[] = new int[n];
		int b[] = new int[n];
		int sum = 0;
		for (int i = 0; i < n; i++) {
    
    
			a[i] = in.nextInt();
			b[i] = -1;
		}
		for (int i = 0; i < n; i++) {
    
    
			for (int j = 1; j < a[i] / 2 + 1; j++) {
    
    
				if (a[i] == j * j) {
    
    
					System.out.println(a[i] + "被整除");
					sum++;
					b[i] = 0; // 标记是可以被整除
					break;
				}
			}
			if (b[i] == -1) {
    
    
				int the_a = a[i];
				while (true) {
    
    
					a[i]++;
					for (int j = 1; j < a[i] / 2 + 1; j++) {
    
    
						if (a[i] == j * j) {
    
    
							b[i] = a[i] - the_a;
							System.out.println("b[" + i + "]:" + b[i]);
							break;
						}
					}
					if (b[i] != -1)
						break;
				}
			}
		}
		if (n % 2 == 0) {
    
    
			int need = n / 2 - sum;
			System.out.println(my_need(b, sum, need));
		} else {
    
    
			int need = n / 2 + 1 - sum;
			System.out.println(my_need(b, sum, need));
		}
	}

	private static int my_need(int b[], int sum, int need) {
    
    
		if (need <= 0)
			return 0;
		else {
    
    
			int need_sum = 0;
			b = my_sort(b);
			int _sum = 0;
			for (int i = 0; i < b.length; i++) {
    
    
				if (b[i] > 0 && _sum < need) {
    
    
					need_sum += b[i];
					_sum++;
				}
			}
			return need_sum;
		}
	}

	private static int[] my_sort(int a[]) {
    
    
		for (int i = 0; i < a.length - 1; i++) {
    
    
			for (int j = 0; j < a.length - 1 - i; j++) {
    
    
				if (a[j] > a[j + 1]) {
    
    
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
		return a;
	}
}

【测试结果】:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【题2】:(由于一直以为前面有问题没做好,最后没想到是排序的问题,导致第一题没做完,第二题还没看就被迫交卷了。(/哭笑))
最后:真的是久不接触!!!就会老化啊!!!!要多做做编程题才行!!!

笔者个人开发的微信小程序(可以支持一下):

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43263647/article/details/115017726