现在的位置: 首页 > 综合 > 正文

ACM编程赛题目共享(下)

2018年03月23日 ⁄ 综合 ⁄ 共 3284字 ⁄ 字号 评论关闭

首先,我想申明的是,这里的ACM竞赛是我们学院自己组织的,题目不是很难,不过只有几题,现在把另外两题补上!此外,我还附上了自己写的答案。有兴趣的朋友不妨也写下,或者帮我更正一下!题目见下

 

 

Problem B Casesar 密码

Time Limit 1 Seconds Memory limit 32768K input filecasesar.in

Julius Casesar生活在战争年代,为了生存,他发明了Casesar密码。用于军队消息传送,作为Casesar军团的一名军官,你需要将Casesar密码破译出来给你的Boss,消息的加密方式是:对于消息原文中的每个字母,分别用该字母之后的第5个字母替换,

密码字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ

原文字母:VMXYZABCDEFGHIJKLMNOPQRSTU

现在有不超过100个的数据集,每个数据集不超过200个字符,将其转换为原文。

Input:不超过100个字符的数据集

Output:每个数据对应一行,输出为Casesar的原始消息

例子:

Sample Iutput

MR AEV,IZIRXW SJ MQTSVXERXGI EVI XLII VIWYPX SJ XVMZMEP GEYWIW

M ASYPH VEXLIV FI JMVWX MR E PMXXPII MRIVMER ZMPPEKI XLER WIGSRH MR VSQI

Sample Output

IN WAR,EVENTS OF IMPORTANTCE ARE THEE RESULT OF TRIVIAL CAUSES

I WOULD RATHER BE FIRST IN A LITTLEE INERIAN VILLAGE THAN SECOND IN ROME

 

源程序如下

import java.io.*;

import java.util.Arrays;

 

public class Casesar {

 

public static void main(String[] args) throws IOException {

 

FileInputStream fis = new FileInputStream("casesar.in");

BufferedReader br = new BufferedReader(new InputStreamReader(fis));

 

Decode myDecode = new Decode(br);

myDecode.getCasesar();

}

}

 

class Decode {

 

BufferedReader br;

 

Decode(BufferedReader br) {

this.br = br;

}

 

public void getCasesar() throws IOException {

String str = null;

char[] CharArray;

str = br.readLine();

while (str != null) {

CharArray = str.toCharArray();

decodeMethod(CharArray);

str = br.readLine();

}

 

}

 

public void decodeMethod(char[] CharArray) {

 

for (int i = 0; i < CharArray.length; i++) {

if ('A' <= CharArray[i] && CharArray[i] <= 'D')

CharArray[i] = (char) (CharArray[i] + 22);

else if ('E' <= CharArray[i] && CharArray[i] <= 'Z')

CharArray[i] = (char) (CharArray[i] - 4);

 

}

for (int i = 0; i < CharArray.length; i++)

System.out.print(CharArray[i]);

System.out.println();

}

}

 

说明:在指定目录下建立一个casesar.in文件,以记事本方式打开,输入两行文本,如下所示:

MR AEV,IZIRXW SJ MQTSVXERXGI EVI XLII VIWYPX SJ XVMZMEP GEYWIW

M ASYPH VEXLIV FI JMVWX MR E PMXXPII MRIVMER ZMPPEKI XLER WIGSRH MR VSQI

 

 

Problem E 二倍数 Doubles

ZJU 1760 Doubles

Time Limit 1 Seconds Memory limit 32768K input file double.in

请你写出一个算术程序,将随机地给出一列包含215个正整数的数列,程序判定有多少对数,其中一个数是另一个数的2倍(Double)。你的程序将能够读取一个数列,计算出每个数列的正确结果。例如,将给出下面的数列

1     4     3     2     9     7     18    22

你的结果应该是321的两倍,42的两倍,189的两倍)。

Input:输入将是一列或多列数列,每列包含215个正整数(大于0而小于39),每列以0为标记结束,但0不在数列内。输入-1代表程序停止。

Output:每个输出只有一行输出结果。

例子:

Sample Input

1     4     3     2     9     7     18    22    0

2     4     8     10    0

7     5     11    13    1     3     0

-1

Output

3

2

0

 

源程序:

import java.io.*;

 

public class Doubles {

 

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream("double.in");

BufferedReader br = new BufferedReader(new InputStreamReader(fis));

 

CalculateDoubles myCalculateDoubles = new CalculateDoubles(br);

myCalculateDoubles.getDoubles();

 

}

 

}

 

class CalculateDoubles {

public final static int COUNT = 15;

BufferedReader br;

 

CalculateDoubles(BufferedReader br) {

this.br = br;

}

 

public void getDoubles() throws IOException {

String str = null;

String[] StringArray = new String[COUNT];

Integer[] IntegerArray = new Integer[COUNT];

str = br.readLine();

while (str != null) {

StringArray = str.split(" ");

for (int i = 0; i < StringArray.length; i++) {

IntegerArray[i] = Integer.parseInt(StringArray[i]);

}

calculateMethod(IntegerArray);

str = br.readLine();

}

 

}

 

public void calculateMethod(Integer[] IntegerArray) {

int c = 0;

int count = 0;

if(IntegerArray[c]==-1)

return;

while (IntegerArray[c] != 0) {

c++;

}

for (int i = 0; i < c; i++) {

for (int j = 0; j < c; j++) {

if (IntegerArray[i] * 1.0 / IntegerArray[j] == 2)

++count;

}

}

System.out.println(count);

}

}

 

说明:

1.    在指定目录下建立double.in文件,并以记事本程序打开,在该文件中的输入如下:

1 4 3 2 9 7 18 22 0

2 4 8 10 0

7 5 11 13 1 3 0

-1

 

 

抱歉!评论已关闭.