北大POJ 1000 ~ 1007

news2024/11/18 18:17:29

1. A+B

🍑 POJ1000 a+b
在这里插入图片描述

🍔 签到题

import java.io.*;
import java.util.*;
public class Main
{
    public static void main(String args[]) throws Exception
    {
            Scanner cin=new Scanner(System.in);
            int a=cin.nextInt(),b=cin.nextInt();
            System.out.println(a+b);
    }
}

2. 高精度

🍑 POJ1001 求高精度幂
在这里插入图片描述
输入

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

输出

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

🍔 BigDecimal

🍑 BigDecimal.stripTrailingZeros():移除尾部所有没有意义的 0 
🍑 BigDecimal.toPlainString():原值转成字符串返回
🍑 BigDecimal.toString():有可能会返回科学计数法

🍑 String.replaceFirst(String regex, String replacement);
🍁 正则匹配前导零:^0*
import java.math.BigDecimal;
import java.util.*;

public class N1001高精度
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext())
		{
//			double a = sc.nextDouble();
//			BigDecimal bd = new BigDecimal(a);
			BigDecimal bd = sc.nextBigDecimal();
			int b = sc.nextInt();
			String value = bd.pow(b).stripTrailingZeros().toPlainString().replaceFirst("^0*", "");
			System.out.println(value);
		}
	}
}

3. 487-3279

🍑 POJ1002 487-3279
在这里插入图片描述
输入

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

输出

310-1010 2
487-3279 4
888-4567 3

🍔 AC代码:字符串存电话号码

🥞 Treeset:自动按升序对元素进行排序
🥞 
import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		char[] key = new char[128];// 对 字母 映射成 对应的数字
		key['A'] = key['B'] = key['C'] = '2';
		key['D'] = key['E'] = key['F'] = '3';
		key['G'] = key['H'] = key['I'] = '4';
		key['J'] = key['K'] = key['L'] = '5';
		key['M'] = key['N'] = key['O'] = '6';
		key['P'] = key['R'] = key['S'] = '7';
		key['T'] = key['U'] = key['V'] = '8';
		key['W'] = key['X'] = key['Y'] = '9';

//		HashMap<String,Integer> map = new HashMap();  
//不知道为什么使用HashMap超时,TreeMap通过,可能散列函数对样例不太适用吧
		TreeMap<String, Integer> map = new TreeMap();// TreeMap 默认排升序
		String tmp[] = null;
		Scanner sc = new Scanner(System.in);
//		sc = new Scanner(new File("in.txt"));
		int n = sc.nextInt();
		boolean flag = false;
		for (int i = 0; i < n; i++)
		{
			String ss = sc.next();
			char[] arr = ss.toCharArray();// 转为数组处理
			String num = "";
			for (int j = 0; j < arr.length; j++)
			{
				if (arr[j] >= '0' && arr[j] <= '9')
				{
					num += arr[j];// 字符串拼接
				} else if (arr[j] >= 'A' && arr[j] <= 'Z')
				{
					num += key[arr[j]];
				}
			}
			if (map.containsKey(num))
			{
				flag = true;
				map.put(num, map.get(num) + 1);
			} else
			{
				map.put(num, 1);
			}
		}
		if (!flag)
			System.out.println("No duplicates.");
		else
		{
			for (String k : map.keySet())
			{
				int value = map.get(k);
				if (value > 1)
				{
					for (int i = 0; i < k.length(); i++)
					{
						System.out.print(k.charAt(i));
						if (i == 2)
							System.out.print("-");
					}
					System.out.println(" " + value);
				}
			}
		}

	}
}

🍑 没考虑高位为 0 的情况
😪 WA版本

import java.util.*;
import java.io.*;

public class Main
{
	static int[] st = new int[256];
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws IOException
	{
//		Scanner sc = new Scanner(System.in);
//		int n = sc.nextInt();//注意 scanf 不处理回车键(会留在缓冲区影响下一次输入)

		int n = Integer.parseInt(in.readLine());
		TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();// key 表示电话号码,value 表示出现次数

		st['A'] = st['B'] = st['C'] = 2;
		st['D'] = st['E'] = st['F'] = 3;
		st['G'] = st['H'] = st['I'] = 4;
		st['J'] = st['K'] = st['L'] = 5;
		st['M'] = st['N'] = st['O'] = 6;
		st['P'] = st['R'] = st['S'] = 7;
		st['U'] = st['V'] = st['T'] = 8;
		st['W'] = st['X'] = st['Y'] = 9;

		for (int i = 0; i < 10; i++)
		{
			st[i + '0'] = i;
		}
		boolean isDuplicate = false;
		for (int i = 0; i < n; i++)
		{
			String s = in.readLine();
			s = s.replace("-", "");
			int len = s.length();
			int num = 0;
//			处理号码
			for (int j = 0; j < len; j++)
			{
				char c = s.charAt(j);
				if (c != '-')
					num = num * 10 + st[c];
			}
//			int t = map.getOrDefault(num, 0);
			int t = map.get(num) == null ? 0 : map.get(num);
			if (t > 0)
				isDuplicate = true;// 只要有一个号码出现一次重复

			map.put(num, t + 1);// 记录号码的次数
		}
		if (!isDuplicate)
		{
			System.out.println("No duplicates.");
		} else
		{
			for (int k : map.keySet())
			{
				int value = map.get(k);
				if (value > 1)
				{
//					out.write(k / 10000 + "-" + k % 10000 + " " + value + "\n");// k%10000 会出现 0 的情况,不可行
					System.out.printf("%03d-%04d %d", k / 10000, k % 10000, value);
				}
			}
		}
		out.flush();
	}
}

4. 叠卡片

🍑 POJ 1003 Hangover
在这里插入图片描述
输入

1.00
3.71
0.04
5.19
0.00

输出

3 card(s)
61 card(s)
1 card(s)
273 card(s)

🍑 大体题意:

🍤 从上到下,第1张卡片能伸出 1/2 的长度,第2张卡片 1/3,第三张 1/4 ……
🍤 问:需要多少张卡片才能伸出 输入 的长度 n
🍤 每张卡片的长度为 1
import java.util.Scanner;

public class Main
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext())
		{
			double n = sc.nextDouble();
			if (n == 0.00)
				break;
			double len = 0;
			int i = 2;
			int ans = 0;
			while (len < n)
			{
				len += 1.0 / i;
				i++;
			}
			System.out.printf("%d card(s)\n", i - 2);
		}
	}
}

5. 财务管理

🍑 POJ1004 Financial Management
在这里插入图片描述
输入

100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75

输出

$1581.42

🍑 输入12个数求平均数

import java.util.Scanner;

public class Main
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		double sum = 0;
		for (int i = 0; i < 12; i++)
			sum += sc.nextDouble();
		
		System.out.printf("$%.2f", sum / 12);//浮点数输出用 %f
	}
}

6. 我想我需要一艘船屋

🍑 POJ 1005 I Think I Need a Houseboat

在这里插入图片描述
输入

2
1.0 1.0
25.0 0.0

输出

Property 1: This property will begin eroding in year 1.
Property 2: This property will begin eroding in year 20.
END OF OUTPUT.

🍑 Π:Math.PI
🍑 求出 坐标原点欧几里得距离 --> 半径 --> 面积 --> 年数(向上取整)

import java.util.Scanner;

public class Main
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i = 1; i <= n; i++)
		{
			double x = sc.nextDouble();
			double y = sc.nextDouble();
			double r = Math.sqrt(x * x + y * y);
			double s = Math.PI * r * r / 2;
			int year = (int) s / 50 + 1;
			System.out.printf("Property %d: This property will begin eroding in year %d.\n", i, year);
		}
		System.out.println("END OF OUTPUT.");
	}
}

7. 生理周期

🍑 POJ 1006 Biohythms

在这里插入图片描述
输入

0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
-1 -1 -1 -1

输出

Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910 days.
Case 6: the next triple peak occurs in 10789 days.

🍑 跳跃枚举

🍤 缓冲流输入输出
🍤 判断条件放 for 里边
🍤 输出格式注意空格(Presentation Error)
import java.io.*;

public class Main
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
		for (int j = 1;; j++)
		{
			String[] ss = in.readLine().split(" ");
			int p = Integer.parseInt(ss[0]);
			int e = Integer.parseInt(ss[1]);
			int i = Integer.parseInt(ss[2]);
			int d = Integer.parseInt(ss[3]);
			if (p == -1 && e == -1 && i == -1 && d == -1)
				break;
			int k = d + 1;
			for (; (k - p) % 23 != 0; k++)
				;

			for (; (k - e) % 28 != 0; k += 23)
				;

			for (; (k - i) % 33 != 0; k += 23 * 28)
				;

			out.write("Case " + j + ": the next triple peak occurs in " + (k - d) + " days.\n");
		}
		out.flush();
	}
}

🍑 中国剩余定理
🙈 线性同余方程、扩展欧几里得求逆元 (挖个坑)
在这里插入图片描述


import java.io.*;
import java.util.*;

public class Main
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
		int M = 21252;
		int cnt = 1;
		while (true)
		{
			String[] ss = in.readLine().split(" ");
			int p = Integer.parseInt(ss[0]);
			int e = Integer.parseInt(ss[1]);
			int i = Integer.parseInt(ss[2]);
			int d = Integer.parseInt(ss[3]);

			if (p == -1 && e == -1 && i == -1 && d == -1)
				break;
			int res = (5544 * p + 14421 * e + 1288 * i) % M;
			res -= d;
			if (res <= 0)
				res = (res + M - 1) % M + 1;
			out.write("Case " + cnt + ": the next triple peak occurs in " + res + " days.\n");
		}
		out.flush();
	}
}

8. DNA 排序

🍑 POJ 1007 DNA Sorting
🍑 HDOJ 1379 DNA Sorting
在这里插入图片描述
👨‍🏫 区别:杭电是多组输入

输入

1
	
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

输出

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

🍑 按 逆序数 进行 稳定排序

🥞 归并排序求逆序数

🍑 HDOJ AC啦

import java.util.Scanner;

public class Main
{
    static int l;
    static char[] a;
    static char[] tmp;
    static boolean[] st;

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while (T-- > 0)
        {
            l = sc.nextInt();
            int n = sc.nextInt();
            String[] ss = new String[n];
            long[] cnt = new long[n];// 记录每个字符串的逆序数

            for (int i = 0; i < n; i++)
            {
                ss[i] = sc.next();
            }

            for (int i = 0; i < n; i++)
            {
                a = new char[l];
                tmp = new char[l];
                a = ss[i].toCharArray();
                long t = mergeSort(0, l - 1);
                cnt[i] = t;
            }

//            按逆序对升序排序
            int[] mk = new int[n];// 按升序存 DNA 数组下标

            int k = 0;
            st = new boolean[n];
            while (k < n)
            {
                int min = -1;
                for (int i = 0; i < n; i++)
                {
                    if (!st[i] && (min == -1 || cnt[i] < cnt[min]))
                        min = i;
                }
                mk[k++] = min;
                st[min] = true;
            }

            for (int i = 0; i < n; i++)
            {
                System.out.println(ss[mk[i]]);
            }
        }
    }

    // 输入区间的左右边界,返回该区间的逆序数
    private static long mergeSort(int l, int r)
    {
        if (l == r)
            return 0;

        int mid = l + r >> 1;
//        分治求解
        long ans = mergeSort(l, mid) + mergeSort(mid + 1, r);

        int i = l;// 左区间指针
        int j = mid + 1;// 右区间指针
        int k = 0;

        while (i <= mid && j <= r)
        {
            if (a[i] <= a[j])
                tmp[k++] = a[i++];
            else
            {
                tmp[k++] = a[j++];
                ans += mid - i + 1;// 左区间剩余的元素都比当前元素大,更新结果
            }
        }

//        处理掉剩余的元素
        while (i <= mid)
            tmp[k++] = a[i++];
        while (j <= r)
            tmp[k++] = a[j++];

        k = 0;
        for (i = l; i <= r; i++)
            a[i] = tmp[k++];

        return ans;
    }
}

😡 POJ RE啦

import java.util.Scanner;

public class N1007DNA排序
{
	static int l;
	static char[] a;
	static char[] tmp;
	static boolean[] st;

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		l = sc.nextInt();
		int n = sc.nextInt();
		String[] ss = new String[n];
		long[] cnt = new long[n];// 记录每个字符串的逆序数

		for (int i = 0; i < n; i++)
		{
			ss[i] = sc.next();
		}

		for (int i = 0; i < n; i++)
		{
			a = new char[l];
			tmp = new char[l];
			a = ss[i].toCharArray();
			long t = mergeSort(0, l - 1);
			cnt[i] = t;
		}

//		按逆序对升序排序
		int[] mk = new int[n];// 按升序存 DNA 数组下标

		int k = 0;
		st = new boolean[n];
		while (k < n)
		{
			int min = -1;
			for (int i = 0; i < n; i++)
			{
				if (!st[i] && (min == -1 || cnt[i] < cnt[min]))
					min = i;
			}
			mk[k++] = min;
			st[min] = true;
		}

		for (int i = 0; i < n; i++)
		{
			System.out.println(ss[mk[i]]);
		}
	}

	// 输入区间的左右边界,返回该区间的逆序数
	private static long mergeSort(int l, int r)
	{
		if (l == r)
			return 0;

		int mid = l + r >> 1;
//		分治求解
		long ans = mergeSort(l, mid) + mergeSort(mid + 1, r);

		int i = l;// 左区间指针
		int j = mid + 1;// 右区间指针
		int k = 0;

		while (i <= mid && j <= r)
		{
			if (a[i] <= a[j])
				tmp[k++] = a[i++];
			else
			{
				tmp[k++] = a[j++];
				ans += mid - i + 1;// 左区间剩余的元素都比当前元素大,更新结果
			}
		}

//		处理掉剩余的元素
		while (i <= mid)
			tmp[k++] = a[i++];
		while (j <= r)
			tmp[k++] = a[j++];

		k = 0;
		for (i = l; i <= r; i++)
			a[i] = tmp[k++];

		return ans;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue3】Vue项目各个配置文件的相关用途

通过Vue Cli创建好初始代码后&#xff0c;对于各个文件以及配置文件的用途&#xff0c;比较模糊。弄清楚配置文件的大致作用&#xff0c;十分有利于项目整体性的把控&#xff0c;在实际项目中例如修改配色、样式、统一页面结构等&#xff0c;都可以事半功倍。 1、package.json …

分享下这些软件外包公司(2023最新版),程序员有福了

金三银四已经过去一半&#xff0c;再过几个月又将迎来毕业季&#xff0c;大家有没有找到心仪的工作机会呀&#xff1f; 今年找工作的行情确实不行&#xff0c;在网上也能听见很多人在讨论说今年工作实在是太难找了。 如果实在找不到合适的工作&#xff0c;那外包也可以考虑下了…

【LeetCode】102.二叉树的层序遍历

1.问题 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a…

Centos7配置静态ip地址

目录 查找配置网络的文件 配置静态ip VMware查找网关ip Windows Mac 查找配置网络的文件 先输入以下命令查看下ip是通过哪个文件来配置的 ip addr 修改网络配置文件&#xff08;注意看我上面查到的是ens32, 所以在ifcfg-后面拼的是这个&#xff09; vi /etc/sysco…

VM——下载 centos

进入centos官网 这里显示了我所在地区可用的ISO镜像&#xff0c;这里我选阿里的镜像库 然后选择centos的版本&#xff0c; 【DVD】标准版本 【Everything】集成所有软件版本 【LiveGNOME】GNOME桌面版本 【LiveKDE】KDE桌面版本 【Minimal】最小安装版本 【NetInstall】网…

Qt Quick - TabBar

Qt Quick - TabBar使用总结 一、概述二、调整选项卡三、Flickable标签三、定制化 一、概述 TabBar其实就是选项卡&#xff0c;TabBar是由TabButton控件填充&#xff0c;TabBar可以与任何提供currentIndex属性的布局或容器控件一起使用&#xff0c;如StackLayout或SwipeView。T…

扬帆优配|鼎智科技大涨22%登上龙虎榜 新股“赚钱效应”再现

上市第三天&#xff0c;鼎智科技(873593)因大涨22%登上“龙虎榜”&#xff0c;北交所发表的数据显示&#xff0c;组织现身买入榜&#xff0c;同时卖出榜也呈现了组织座位。 鼎智科技上市后接连上涨&#xff0c;使得北交所新股呈现久违的“赚钱效应”。从近期北交所新股的发行结…

从高考开始跌跌撞撞到目前的研究生拟录取

文章目录 前言一、高考的失利二、本科生活三、研究生初试的力不从心四、研究生复试的措手不及后话 前言 其实我一直都很想写写关于我的学习生涯之类的记录&#xff0c;但是不知道该以何种心态来书写… 看到学信网的拟录取通知当时其实是有点麻木的&#xff0c;感觉有很多话想说…

Pytorch深度强化学习:Gym安装与环境搭建教程(附基本指令表)

目录 1 Gym介绍2 Gym安装3 基本指令3.1 make()3.2 reset()3.3 step()3.4 close() 4 常见问题参考资料 1 Gym介绍 强化学习是在潜在的不确定复杂环境中&#xff0c;训练一个最优决策指导一系列行动实现目标最优化的机器学习方法。自从AlphaGo的横空出世之后&#xff0c;确定了强…

从promise到await

在之前的这篇文章中&#xff0c;已经讲完了从异步操作到promise的诞生&#xff0c;但是promise也仅仅是做到了异步操作和结果的分离&#xff0c;当我们有多个异步操作&#xff0c;且结果前后有依赖的时候&#xff0c;不可避免的&#xff0c;就会出现一系列的.then方法。还是不大…

【JS每N日一练】 将CSDN文章自动生成Markdown列表

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 分析及编码页面分析枚举列表处理li&#xff0c;获取Markdown完成功能拼装 2️⃣ 完整代码及运行结果完整代码运行结果 &#x1f6ec; 总结 &#x1f6eb; 问题 描述 作为程序员必备素质-懒&#xff0c;今天又给自己了一个造了个需…

QGIS--开发OpenSCENARIO动态场景(一)--Ubuntu20.04 安装QGIS

qgis的git&#xff1a; GitHub - qgis/QGIS: QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS) qgis的官网:Welcome to the QGIS project! qgis插件包下载地址&#xff1a;https://plugins.qgis.org/plugins/ 1.Prerequisi…

java IO流_2

目录 字节缓冲流 序列化 使用对象流实现序列化 标准输入输出流 转换流 打印流 PrintStream PrintWriter properties读写文件 字节缓冲流 字节流 import java.io.FileInputStream; import java.io.FileOutputStream;public class FileCopy {public static void main(Str…

年薪30W+,待遇翻倍,我的经历值得每个测试人借鉴

从自考大专到出走公司&#xff0c;从半年无业露宿深圳北站&#xff0c;从8k…到11.5k…再到20k&#xff0c;我的经历值得每个测试人借鉴 或许学历并没有那么重要 12年高考之后&#xff0c;在朋友的介绍下&#xff08;骗了过去&#xff09;&#xff0c;没有好好的读大学&#x…

java mysql高校后勤管理系统的设计与开发 宿舍公寓管理

1&#xff0e;用户管理子系统&#xff1a;采用通过用户密码的登录机制&#xff0c;管理员登录后可以修改个人信息&#xff08;用户名、密码、姓名、联系方式&#xff09;&#xff0c;具有楼的属性&#xff0c;只能对所管辖宿舍楼进行查询、修改等操作。 2.宿舍信息管理子系统&a…

上海出台新政数字经济、人工智能利好

利好一、上海印发 《上海市推进算力资源统一调度指导意见》的通知 数字经济、人工智能的利好不断。 19日&#xff0c;上海市经济信息化委印发《上海市推进算力资源统一调度指导意见》的通知。 其中提到&#xff1a; 到2023年底&#xff0c;依托本市人工智能公共算力服务平台…

【U8+】win10/11系统注册用友U8硬加密

【问题需求】 由于用友U813.0及之前版本都是硬加密&#xff0c; 并且注册的时候严格要求使用IE浏览器。 但是随着系统的升级&#xff0c;绝大多数的都开始使用win10/11系统。 并且IE浏览器已经不支持win10/11系统&#xff0c; 取而代之的是Edge浏览器。 【经验分享】 以下分享…

扬帆优配|放量跌停和缩量跌停的区别?哪个更好?

投资者在买卖股票的过程中股票跌停的话&#xff0c;一般会呈现两种状况&#xff1a;一种是放量跌停&#xff0c;一种是缩量跌停。很多投资者不明白两者到底有什么差异&#xff0c;那么放量跌停和缩量跌停的差异是什么&#xff1f;哪个更好&#xff1f;下面就由扬帆优配有为我们…

使用node版本管理器gnvm

目录 一、官网 二、下载 三、查看本机node安装地址 四、将gnvm放到node安装目录 五、安装其他版本node&#xff08;以管理员身份打开CMD&#xff09; 六、使用指定版本&#xff08;以管理员身份打开CMD&#xff09; 七、查看当前版本&#xff08;以管理员身份打开CMD&…

Spring依赖注入的三种方式使用及优缺点

初学Spring的时候,我们从Spring容器中获取Bean对象都是通过bean标签先将Bean对象注册到Spring容器中&#xff0c;然后通过上下文对象congtext的getBean方法进行获取&#xff0c;显然这种方法较为麻烦&#xff0c;所以有了更简单的存方法&#xff1a;五大类注解&#xff1b;取方…