2022-3-27学习博客

归并排序

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class 归并排序 {
	static int[] arr;
	static int[] temp;
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bReader.readLine());
		String[] strings=bReader.readLine().split(" ");
		arr=new int[n];
		temp=new int[n];//临时数组存储排序后的数
		for(int i=0;i<n;i++) {
			arr[i]=Integer.parseInt(strings[i]);
		}
		mergeSort(0, arr.length-1);
		for(int i=0;i<n;i++) {
			System.out.print(arr[i]+" ");
		}

	}
	
	public static void mergeSort(int l,int r) {
		if(l>=r) {
			return;//只有一个元素时无需排序,直接返回
		}
		int mid=l+r>>1;//取中间值做临界值
		mergeSort(l, mid);
		mergeSort(mid+1, r);
		int k=0;//临时数组的索引
		int i=l,j=mid+1;//双指针分别指向两个左端点
		while(i<=mid&&j<=r) {//当两个指针都没有走到末尾时
			if(arr[i]>arr[j]) {
				temp[k++]=arr[j++];//将较小值存储到临时数组
			}else{
				temp[k++]=arr[i++];
			}
		}
		
		while(i<=mid) {
			temp[k++]=arr[i++];//剩余值存储到临时数组
		}
		while(j<=r) {
			temp[k++]=arr[j++];
		}
		
		for(i=l,j=0;i<=r;i++,j++) {//将排好序的数组存储到原数组
			arr[i]=temp[j];
		}
	}

}

哈夫曼树

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;


public class 哈夫曼树 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bReader.readLine());
		String[] splitStrings=bReader.readLine().split(" ");
		List<Integer> list=new LinkedList<>(); 
		for(int i=0;i<n;i++) {
			list.add(Integer.parseInt(splitStrings[i]));
		}
		int ans=0;
		while(list.size()!=1) {
			Collections.sort(list);
			Integer a=list.remove(0);
			Integer b=list.remove(0);
			int sum=a+b;
			ans+=sum;
			list.add(sum);
		}
		System.out.println(ans);

	}

}

加法分解

import java.util.Scanner;

public class 加法分解 {
	public static int n;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		n=scanner.nextInt();
		f("",n);
	}
	
	public static void f(String string,int m) {
		if(m==0) {
			System.out.println(n+"="+string.substring(1));
			return;//结束当前函数
		}
		for(int i=1;i<=m;i++) {
			f(string+"+"+i,m-i);
		}
		
	}

}

十六进制转八进制

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;



public class 十六进制转八进制 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bReader.readLine());
		String[] strings=new String[n];
		for(int i=0;i<n;i++) {
			strings[i]=bReader.readLine();
		}
		for(int i=0;i<n;i++) {
			String s=strings[i];
			BigInteger numBigDecimal=new BigInteger(s,16);
			System.out.println(numBigDecimal.toString(8));
		}

	}

}

饮料换购

import java.util.Scanner;

public class 饮料换购 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();//初始买入的饮料数量
		int ans=0;//喝的饮料数量
		int cnt=0;//瓶盖数量
		while(n!=0) {
			cnt++;
			n--;
			ans++;
			if(cnt==3) {
				cnt=1;
				ans++;
			}
		}
		System.out.println(ans);
	}

}

回文日期

import java.util.Scanner;

public class 回文日期 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();//起始日期
		int m=scanner.nextInt();//终止日期
		int ans=0;//初始化回文日期个数
		for(int i=1000;i<=9999;i++) {
			int j=reverseNum(i);
			int ij=10000*i+j;
			if(ij>m||ij<n) {
				continue;//终止本次循环
			}
			if(isValid(i, j)) {
				ans++;//该回文数合法,满足日期格式
			}
		}
		System.out.println(ans);

	}
	
	
	public static int reverseNum(int n) {
		int m=0;//存储翻转后的数
		while(n>0) {
			m=m*10+n%10;
			n/=10;
		}
		return m;
	}
	
	public static int getDay(int y,int m) {//y表示年份,即前四位数,m表示月份,即中间两位数
		int[] m1=new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};//平年
		int[] m2=new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年
		if(y%400==0||y%4==0&&y%100!=0) {//判断闰年
			return m2[m];
		}
		else {
			return m1[m];
		}
		
	}
	
	public static boolean isValid(int y,int n) {//y是前四位数,n是后四位数
		int m=n/100;//月
		int d=n%100;//日
		if(m==0||m>=13) {
			return false;
		}
		int day=getDay(y, m);//月份对应的天数
		if(d==0||d>day) {
			return false;
		}
		return true;
	}

}

感冒蚂蚁

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class 感冒蚂蚁 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(bReader.readLine());
		String[] splitStrings = bReader.readLine().split(" ");
		int[] arr = new int[n];// 初始化n个距离
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(splitStrings[i]);
		}

		int ans = 1;// 初始化一个已感冒的蚂蚁
		boolean flag = false;
		if (arr[0] > 0) {// 感冒蚂蚁开始时向右走
			for (int i = 1; i < n; i++) {
				if (Math.abs(arr[i]) > arr[0]) {// 如果蚂蚁距离大于初始距离,则在感冒蚂蚁右边
					if (arr[i] < arr[0]) {// 在感冒蚂蚁的右边有向左走的蚂蚁
						ans++;// 感冒蚂蚁数量多1
						flag = true;
					}
				}
			}

			for (int i = 1; i < n; i++) {
				if (Math.abs(arr[i]) < arr[0]) {// 蚂蚁在感冒蚂蚁左边
					if (arr[i] > 0 && flag) {// 在感冒蚂蚁左边有向右走的蚂蚁且感冒蚂蚁的右边有向左走的蚂蚁
						ans++;// 感冒蚂蚁数量多1
					}
				}
			}

		}

		if (arr[0] < 0) {// 感冒蚂蚁开始时向左走
			for (int i = 1; i < n; i++) {
				if (Math.abs(arr[0]) > arr[i]) {// 蚂蚁在感冒蚂蚁左边
					if (arr[i] > 0) {// 在感冒蚂蚁左边的蚂蚁向右走
						ans++;// 感冒蚂蚁数量多1
						flag = true;
					}
				}
			}
			for (int i = 1; i < n; i++) {
				if (arr[i] < arr[0] && flag) {// 在感冒蚂蚁的右边有向左走的蚂蚁且感冒蚂蚁的左边有向右走的蚂蚁
					ans++;// 感冒蚂蚁数量多1
				}
			}
		}
		System.out.println(ans);
	}

}

错误票据

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class 错误票据 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bReader.readLine());
		int max=Integer.MIN_VALUE;//初始化最大值
		int min=Integer.MAX_VALUE;//初始化最小值
		int[] arr=new int[100001];//存储数字出现的次数
		for(int i=0;i<n;i++) {
			String[] splitStrings=bReader.readLine().split(" ");
			for(int j=0;j<splitStrings.length;j++) {
				int num=Integer.parseInt(splitStrings[j]);
				if(num>max) {
					max=num;
				}
				if(num<min) {
					min=num;
				}
				arr[num]++;
			}
		}
		
		int ans1=0;//没有出现过的数字
		int ans2=0;//出现两次的数字
		for(int i=min;i<=max;i++) {
			if(arr[i]==0) {
				ans1=i;
			}
			if(arr[i]==2) {
				ans2=i;
			}
		}
		System.out.println(ans1+" "+ans2);

	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值