Java基础期中小结(一)

反转字符串

题目:将输入的字符串翻转后输出。如abcd输出为dcba。

思路:将字符串转换为字符数组,倒着遍历。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String s = in.nextLine();
		String reverse = "";
		char[] ch = s.toCharArray();
		for(int i=ch.length-1;i>=0;i--) {
			reverse+=ch[i];
		}
		System.out.print(reverse);
	}

找朋友

题目:每个案例第一行两个整数N,M。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P。输出N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”。

思路:定义两个数组分别存放每个人喜欢的图书编号和喜欢某图书的人数。最后由题意可得,对于每一位读者,遍历他喜欢的书的人数是否超过1,超过则计算人数(-1),否则输出“BeiJu”。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int N=0, M=0;
		N = in.nextInt();M=in.nextInt();
		int[] f = new int[N];
		int[] book = new int[M];
		for (int i=0;i<N;i++) {
			f[i]=in.nextInt();
			book[f[i]]++;
		}
		for (int i=0;i<N;i++) {
			if(book[f[i]]>1) {
				System.out.println(book[f[i]]-1);
			}else {
				System.out.println("BeiJu");
			}
		}
		in.close();
	}

计算int型二进制1的个数

题目:计算int型二进制1的个数。即将数转为二进制后,统计1的个数。如输入5,输出2.

思路:利用Integer类里的toBinaryString方法,将输入的int型整数转换成二进制字符串,对其进行遍历统计1的个数。

public static void main(String[] args) {
		// TODO Auto-generated method stub	
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int sum = 0;
		String result = Integer.toBinaryString(n);
		for (int i=0;i<result.length();i++) {
            //charAt:利用下标进行字符串定位
			if(result.charAt(i)=='1')sum++;
		}
		System.out.print(sum);
		in.close();
	}

情报加密

题目:对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代。可能有多组测试数据。每组测试数据的第一行是字符串的数目n,其余n行每行一个字符串,每个字符串长度小于80个字符。对于每组数据,输出每行字符串的加密字符串。

输入 1 (回车) Hello! How are you!

输出 Ifmmp! Ipx bsf zpv!

思路:因为可能有多组测试数据,因此需要while(in.hasNextInt())进行判断,当下一个输入是整数型时则接收输入且以此设定循环。循环内根据条件进行修改即可,注意强制类型转换。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		
		while(in.hasNextInt()) {
			int n = in.nextInt();
			for(int i=0;i<n;i++) {
                //按行读入
				String s = in.nextLine();
				String change = "";
				for(int j=0;j<s.length();j++) {
					if((s.charAt(j)>='a'&&s.charAt(j)<'z')||(s.charAt(j)>='A'&&s.charAt(j)<'Z')) {
						change+=(char)(s.charAt(j)+1);
					}else if(s.charAt(j)=='Z'||s.charAt(j)=='z') {
						change+=(char)(s.charAt(j)-25);
					}else {
						change+=s.charAt(j);
					}
				}
				System.out.println(change);
			}
			
		}
		in.close();
	}

计算日期

题目:给出年分m和一年中的第n天,算出第n天是几月几号。输入包括两个整数y,n。可能有多组测试数据,对于每组数据,按yyyy-mm-dd的格式将输入中对应的日期打印出来。

样例输入样例输出
2000 32000-01-03
2000 312000-01-31
2000 402000-02-09
2000 602000-02-29

思路:

使用java自带的Calendar类进行解题。

注意:calendar类默认0为一月。

get(Calendar.DAY_OF_MONTH);//获得这个月的第几天
get(Calendar.DAY_OF_WEEK);//获得这个星期的第几天 
get(Calendar.DAY_OF_YEAR);//获得这个年的第几天  
getTimeMillis();//获得当前时间的毫秒表示
public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar calendar = Calendar.getInstance();//获取一个calendar实例
		Scanner in = new Scanner(System.in);
		int y=0,n=0;
		while(in.hasNextInt()) {
			y = in.nextInt(); 
			n = in.nextInt();
			calendar.set(Calendar.YEAR, y);
			calendar.set(Calendar.MONTH, 0);//月份设置
			calendar.set(Calendar.DAY_OF_MONTH, 0);//月中的第几天
			calendar.add(Calendar.DATE, n);//指一个月中的某天,与DAY_OF_MONTH同义
            //格式化输出
			SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM-dd");
			String time = format0.format(calendar.getTime());
			System.out.println(time);
		}
		in.close();
	}

求近似数

题目:求小数四舍五入后的结果

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		System.out.print(Math.round(in.nextDouble()));
		in.close();
	}

输出较小数

题目:输入n个整数,输出其中最小的k个。

如输入 5 2

1 3 5 7 2

输出 1 2

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int k = in.nextInt();
		int[] m = new int[n];
		for(int i=0;i<n;i++) {
			m[i] = in.nextInt();
		}
    //数组排序函数
		Arrays.sort(m);
		for(int i=0;i<k;i++) {
			System.out.print(m[i]+" ");
		}
		in.close();
	}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值