首页 > ACM题库 > 九度OJ > 九度-1195-最长&最短文本[解题代码]
2013
12-13

九度-1195-最长&最短文本[解题代码]

题目来源:2008年华中科技大学计算机研究生机试真题

题目描述:

    输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

输入:

输入包括多行字符串,字符串的长度len,(1<=len<=1000)。

输出:

按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

样例输入:
hello
she
sorry
he
样例输出:
he
hello
sorry

java 代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) throws IOException {
		Scanner s = new Scanner(System.in);
		ArrayList<String> list = new ArrayList<String>();
		ArrayList<Integer> len = new ArrayList<Integer>();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int index = 0;
		String str;
		do{
			str = br.readLine();
			list.add(str);
			len.add(str.length());
		}while(br.ready());
		int l = list.size();
	
		int arr[] = new int[l];
		for(int i=0; i<l; i++)
			arr[i] = i;
//		int lens[] = len.toArray();
		for(int i=0; i<l-1; i++){
			for(int j=i+1; j<l; j++){
				int a = len.get(i);
				int b = len.get(j);
				if(a > b){
					int temp = a;
					len.set(i, b);
					len.set(j, a);
					
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
//		for(int i:len)
//			System.out.println(i);
		for(int i=0; i<l ; i++){
			System.out.println(list.get(arr[i]));
			if((len.get(i) != len.get(i+1))){
				break;
			}
		}
		for(int i=l-1; l>=0; i--){
			System.out.println(list.get(arr[i]));
			if(len.get(i) != len.get(i-1))
				break;
		}
		
	}

}

/**************************************************************
	Problem: 1195
	User: coder
	Language: Java
	Result: Accepted
	Time:450 ms
	Memory:29292 kb
****************************************************************/


  1. 第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。

  2. 换句话说,A[k/2-1]不可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。
    应该是,不可能小于合并后的第K小值吧