首页 > ACM题库 > 九度OJ > 九度-1032-ZOJ[解题代码]
2013
12-12

九度-1032-ZOJ[解题代码]

题目来源:2009年浙江大学计算机及软件工程研究生机试真题

题目描述:
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。
输入:
题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。
1<=length<=100。
输出:
对于每组输入,请输出一行,表示按照要求处理后的字符串。
具体可见样例。
样例输入:
ZZOOOJJJ
ZZZZOOOOOJJJ
ZOOOJJ
E
样例输出:
ZOJZOJOJ
ZOJZOJZOJZOO
ZOJOJO

java 代码如下:
import java.util.Scanner;

public class Main{
	static int arr[] = new int[3];
	static char map2[] = new char[3];
	static int map[] = new int[128];
	
	public static void f(){
		int cnt = 0;
		while(true){
			for(int i=0; i<3; i++){
				if( arr[i] > 0 ){
					System.out.print(map2[i]);
					cnt++;
					arr[i]--;
				}
			}
			if(cnt == str.length())
				break;
		}
		System.out.println();
	}

	static String str;
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		map['Z'] = 0;
		map['O'] = 1;
		map['J'] = 2;
		map2[0] = 'Z';
		map2[1] = 'O';
		map2[2] = 'J';
		while (scan.hasNext()) {
			str = scan.next();
			if (str.equals("E"))
				break;
			for (int i = 0; i < 3; i++)
				arr[i] = 0;
			for (int i = str.length() - 1; i >= 0; i--) {
				arr[map[str.charAt(i)]]++;
			}

			f();

		}

	}

}

/**************************************************************
	Problem: 1032
	User: coder
	Language: Java
	Result: Accepted
	Time:90 ms
	Memory:15468 kb
****************************************************************/


  1. 约瑟夫也用说这么长……很成熟的一个问题了,分治的方法解起来o(n)就可以了,有兴趣可以看看具体数学的第一章,关于约瑟夫问题推导出了一系列的结论,很漂亮