前言
今天突破15分开始写20分的题,超开心!
Pat1026(跟奥巴马一起编程)
题目链接
题目描述:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入描述:
输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。
输出描述:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%
(四舍五入取整)。
输入例子:
10 a
输出例子:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
分析:
要求行数四舍五入取整,则竖行为N,横行数为(N+1)/2表示。
ac代码为:
import java.util.Scanner;
public class Niuk1026 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
String c = scan.next();
for(int i=1;i<=(N+1)/2;i++){
for(int j =1;j<=N;j++){
if(i==1||i==(N+1)/2||j==1||j==N){
System.out.print(c);
}else System.out.print(" ");
}
System.out.println();
}
}
}
Pat1002(数字分类)
题目链接
题目描述:
给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。
输入描述:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。
输出描述:
对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。
输入例子:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出例子:
30 11 2 9.7 9
分析:
这题主要要理解题意,思路要清晰。先求出A1,A2,A3,A4,A5,然后依次输出。
ac代码为:
import java.util.Scanner;
public class Niuk1002 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] N = new int[n];
int a = 0,e = 0, o = 0,j=0,max=0;
double u=0,k=0;
for(int i = 0;i<n;i++){
N[i] = scan.nextInt();
if(N[i]%10==0){
a += N[i];
}else if(N[i]%5==1){
j++;
if(j%2==1) {
e += N[i];
}else e+=-N[i];
}else if(N[i]%5==2){
o++;
}else if(N[i]%5==3){
u += N[i];
k++;
}else if(N[i]%5==4){
if(N[i]>max){
max = N[i];
}
}
}
if(a>0){
System.out.print(a+" ");
}else System.out.print("N" + " ");
if(j>0){
System.out.print(e+" ");
}else System.out.print("N" + " ");
if(o>0){
System.out.print(o+" ");
}else System.out.print("N" + " ");
if(u/k>0){
System.out.print(String.format("%.1f",u/k)+" ");
}else System.out.print("N" + " ");
if(max>0){
System.out.print(max);
}else System.out.print("N");
}
}
Pat1003(数素数)
题目链接
题目描述:
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入例子:
5 27
输出例子:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
分析:
因没有给出素数范围值,又M <= N <= 10000,所以素数取值范围很大,在求素数时要先遍历是否为素数,可用j除以,j的范围不应该取得太大,则采用折中的方法来取,根号J小于等于素数时,给运算带来了方便。
ac代码为:
import java.util.Scanner;
public class Niuk1003 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int M = scan.nextInt();
int N = scan.nextInt();
int[] zhishu = new int[N];
int r = 0;
for (int i = 2; i <= 104731; i++) {
boolean flag = true;
for (int j = 2; j*j< i+1; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
zhishu[r++] = i;//把质数存进数组中
}
if (r == N) {
break;
}
}
int index=0;//index%10==0 syssp
for (r = M-1; r < N; r++) {
index++;
if (index % 10 == 0) {
System.out.println(zhishu[r]);
}
else {
if(r == N-1){
System.out.print(zhishu[r]);
}else {
System.out.print(zhishu[r] + " ");
}
}
}
}
}
Pat1004(福尔摩斯的约会)
题目链接
题目描述:
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母’s’出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入描述:
输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。
输出描述:
在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期
四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。
输入例子:
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
输出例子:
THU 14:04
分析:
要先比较前两个字符串,第1对相同的大写英文字母是什么,符合条件的大写字母再进行switch()判断,定义一个index,使第一个if语句只能执行一次,使第二个if语句执行一次,得到第一组,第二组字母就进行第3,4个字符串的比较。对于时间的输出,我定义了一个接口,进行判断是否加上字符串0.
ac代码为:
import java.util.Scanner;
public class Niuk1004 {
public static String getnum(int a){
if(a>=10)return a+"";
return "0"+a;
}
public static void main(String[] args) {
char[] k = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N'};
Scanner scan = new Scanner(System.in);
String A1 = scan.nextLine();
String A2 = scan.nextLine();
String A3 = scan.nextLine();
String A4 = scan.nextLine();
String str= "";
int f=0,index=0;
int minlen=Math.min(A1.length(),A2.length());
for(int i = 0;i<minlen;i++) {
char B1 = A1.charAt(i);
char B2 = A2.charAt(i);
if(B1==B2&&B1>='A'&&B1<='G'&&index==0){
index++;
switch (B1){
case 'A': str="MON";break;
case 'B': str="TUE";break;
case 'C': str="WED";break;
case 'D': str="THU";break;
case 'E': str="FRI";break;
case 'F': str="SAT";break;
case 'G': str="SUN";break;
}
continue;
}
if(B1==B2&&((B1>='0'&&B1<='9')||(B1>='A'&&B1<='N'))&&index==1){
for(int j=0;j<k.length;j++){
if(B1==k[j]){
index++;
f = j;
break;
}
}
}
}
int minle=Math.min(A3.length(),A4.length());
int m =0;
for(int i=0;i<minle;i++){
char B3 = A3.charAt(i);
char B4 = A4.charAt(i);
if(B3==B4&&((B3>='a'&&B3<='z')||(B3>='A'&&B3<='Z'))) {
m=i;
break;
}
}
String st =getnum(m);
String st1 = getnum(f);
System.out.print(str+" "+st1+":"+st);
}
}