上海交通大学计算机考研复试 2009年(java)

题目一:
题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的
天数为两天

输入描述:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出描述:

每组数据输出一行,即日期差值

示例1
输入

20110412
20110422

输出

11
import java.io.*;
public class Main {
	static int[] mon1 = {0,31,59,90,120,151,181,212,243,273,304,334};
	static int[] mon2 = {0,31,60,91,121,152,182,213,244,274,305,335};
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String date1 = br.readLine();
        String date2 = br.readLine();
        int year1 = Integer.parseInt(date1.substring(0, 4));
        int year2 = Integer.parseInt(date2.substring(0, 4));
        int month1 = Integer.parseInt(date1.substring(4, 6));
        int month2 = Integer.parseInt(date2.substring(4, 6));
        int day1 = Integer.parseInt(date1.substring(6, 8));
        int day2 = Integer.parseInt(date2.substring(6, 8));
        int sum1 = getDay(year1, month1, day1);
        int sum2 = getDay(year2, month2, day2);
        System.out.println(Math.abs(sum1-sum2)+1);
    }
    public static int getDay(int year, int month, int day) {
    	int sum = 0;
    	for(int i = 1; i < year; i++) {
    		if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) sum += 366;
    		else sum += 365;
    	}
    	if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) sum += mon2[month];
    	else sum += mon1[month-1];
    	sum += day;
    	return sum;
    }
}

题目二:
题目描述

     存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c个数到第d个数放到一个数组中,求出合并后数组的中间值,如果有两个中间值,取下标较小的那个。

输入描述:

    第一行两个整数,表示两个数组的长度,
    接下来两行表示两个数字的值,
    最后一行有四个整数a,b,c,d。
    数组长度不会超过1000000。

输出描述:

    每行一个整数,对应合并数组的下标在中间的那个值。
import java.io.*;
import java.util.*;
public class Main
{
    public static void main(String[] args){
    	try {
	        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
	        br.readLine();
	        String[] parts1 = br.readLine().split(" ");
	        String[] parts2 = br.readLine().split(" ");
	        String[] parts3 = br.readLine().split(" ");
	        int[] lens = {Integer.parseInt(parts3[0]), Integer.parseInt(parts3[1]), Integer.parseInt(parts3[2]), Integer.parseInt(parts3[3])};
	        int n = (lens[3] + lens[1] - lens[2] - lens[0] + 3)/2;
	        if(n-(lens[1]-lens[0]+1) > 0) System.out.println(parts2[n-(lens[1]-lens[0]+1)+lens[2]-2]); 
	        else System.out.println(parts1[n+lens[0]-2]);
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
    }
}

题目三:
题目描述

输入一行字符串,计算其中A-Z大写字母出现的次数

输入描述:

案例可能有多组,每个案例输入为一行字符串。

输出描述:

对每个案例按A-Z的顺序输出其中大写字母出现的次数。

示例1
输入

DFJEIWFNQLEF0395823048+_+JDLSFJDLSJFKK

输出

A:0
B:0
C:0
D:3
E:2
F:5
G:0
H:0
I:1
J:4
K:2
L:3
M:0
N:1
O:0
P:0
Q:1
R:0
S:2
T:0
U:0
V:0
W:1
X:0
Y:0
Z:0
import java.io.*;
import java.util.*;
public class Main
{
    public static void main(String[] args){
    	try {
			BufferedReader br = new BufferedReader(new BufferedReader(new InputStreamReader(System.in)));
	        char[] ch = br.readLine().toCharArray();
	        int[] count = new int[26];
	        for(int i = 0; i < ch.length; i++) {
	        	int n = ch[i] - 'A';
	        	if(n>=0&&n<26) count[n]++;
	        }
	        for(int i = 0; i < 26; i++) {
	        	System.out.println((char)(i+'A')+":"+count[i]);
	        }
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
    }
}
发布了332 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43306331/article/details/104978007