PAT编程【素数】【进制】

PAT编程
1.
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

输入描述:
输入在一行中给出M和N,其间以空格分隔。

输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

参考答案:

import java.util.Scanner;

public class woker {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int minIndex = input.nextInt();
        int maxIndex = input.nextInt();
        int index = 0;
        int k = 0;

        for (int i = 1; i <= 999999; i++) {
            if (prime(i) == true)
            {
                index++;
                if (index >= minIndex && index <= maxIndex){
                    k++;
                    if (k % 10 == 0) {
                        System.out.print(i);
                        System.out.println();//换行
                    }else if (index==maxIndex) {
                        System.out.print(i);
                    }
                    else {
                        System.out.print(i + " ");
                    }
                }
            }
        }
    }

    public static boolean prime(int key) {
        if(key==1) return false;
        else {
            for (int i = 1; i <= Math.sqrt(key); i++)
//如果a是合数,那么a的最小质因数一定不大于根号a.
            {
                if (key % i == 0 && i!=1)
                    return false;
            }
        }
        return true;
    }
}

我的答案:差不多

总结:如果a是合数,那么a的最小质因数一定不大于根号a.
2.
五河士道接到一张奇怪的字条:“我们约会吧! 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表示星期日。题目输入保证每个测试存在唯一解。

参考答案:

import java.util.Scanner;
 
public class B1004HolmesDate {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1 = sc.next();
        String s2 = sc.next();
        String s3 = sc.next();
        String s4 = sc.next();
 
        char[] chars1 = s1.toCharArray();
        char[] chars2 = s2.toCharArray();
        char[] chars3 = s3.toCharArray();
        char[] chars4 = s4.toCharArray();
        int length1 = s1.length();
        int length2 = s3.length();
        if (s1.length() > s2.length()) {
            length1 = s2.length();
        }
        if (s3.length() > s4.length()) {
            length2 = s4.length();
        }
        StringBuilder sb = new StringBuilder();
        int temp = 0;
        for (int i = 0; i < length1; i++) {
            if (chars1[i] == chars2[i] && chars1[i] >= 'A' && chars1[i] <= 'G') {
                String day = getWeekDay(String.valueOf(chars1[i]));
                sb.append(day);
                sb.append(" ");
                temp = i;
                break;
            }
        }
 
        for (int i = temp + 1; i < length1; i++) {
            if (chars1[i] == chars2[i]) {
                if (chars1[i] >= 'A' && chars1[i] <= 'N') {
                    int hour = chars1[i] - 'A' + 10;
                    sb.append(hour);
                    sb.append(":");
                    break;
                }
                if (chars1[i] >= '0' && chars1[i] <= '9') {
                    sb.append("0");
                    sb.append(chars1[i]);
                    sb.append(":");
                    break;
                }
            }
        }
 
        for (int i = 0; i < length2; i++) {
            if (chars3[i] == chars4[i] && ((chars3[i] >= 'A' && chars3[i] <= 'Z') || (chars3[i] >= 'a' && chars3[i] <= 'z'))) {
                int min = i;
                if (min < 10) {
                    sb.append("0");
                }
                sb.append(min);
                break;
            }
        }
        System.out.println(sb.toString());
    }
 
    /**
     * MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,
     * FRI表示星期五,SAT表示星期六,SUN表示星期日
    */
    public static String getWeekDay(String week) {
        String weekDay = "";
        switch (week) {
            case "A":
                weekDay = "MON";
                break;
            case "B":
                weekDay = "TUE";
                break;
            case "C":
                weekDay = "WED";
                break;
            case "D":
                weekDay = "THU";
                break;
            case "E":
                weekDay = "FRI";
                break;
            case "F":
                weekDay = "SAT";
                break;
            case "G":
                weekDay = "SUN";
                break;
        }
        return weekDay;
    }
}

我的答案:

import java.util.Scanner;

public class Lyric {

    public static void main(String[] args) {
        String weekday =null;
        int HH = 0;
        int MM = 0;

        Scanner input_1 = new Scanner(System.in);
        Scanner input_2 = new Scanner(System.in);
        Scanner input_3 = new Scanner(System.in);
        Scanner input_4 = new Scanner(System.in);

        String[ ] a=new String[60];
        String[ ] b=new String[60];
        String[ ] c=new String[100];
        String[ ] d=new String[100];//用于存放分解后的四行字符


        String A = input_1.next();
        String B = input_1.next();
        String C = input_1.next();
        String D = input_1.next();//输入四行字符串

        a=A.split("");
        b=B.split("");
        c=C.split("");
        d=D.split("");//拆分字符串为单个字符串

        for(int k=0;k<c.length;k++){
            if (c[k].equals(d[k])&&c[k].matches("[a-zA-Z]+")){
                MM = k;break;
            }
        }


//        if (a.length>=b.length)
        for(int i=0;i<a.length;i++)
        {
            if(a[i].equals(b[i])){
                switch (a[i]){
                    case "A":
                        weekday="MON";break;
                    case "B":
                        weekday="TUE";break;
                    case "C":
                        weekday="WED";break;
                    case "D":
                        weekday="THU";break;
                    case "E":
                        weekday="FRI";break;
                    case "F":
                        weekday="SAT";break;
                    case "G":
                        weekday="SUN";break;
                    default:continue;
                }

                for(int k=i+1;k<=a.length;k++)
                {
                    if (a[k].equals(b[k])){
                        switch (a[k]){
                            case "0":HH=0;break;
                            case "1":HH=1;break;
                            case "2":HH=2;break;
                            case "3":HH=3;break;
                            case "4":HH=4;break;
                            case "5":HH=5;break;
                            case "6":HH=6;break;
                            case "7":HH=7;break;
                            case "8":HH=8;break;
                            case "9":HH=9;break;
                            case "A":HH=10;break;
                            case "B":HH=11;break;
                            case "C":HH=12;break;
                            case "D":HH=13;break;
                            case "E":HH=14;break;
                            case "F":HH=15;break;
                            case "G":HH=16;break;
                            case "H":HH=17;break;
                            case "I":HH=18;break;
                            case "J":HH=19;break;
                            case "K":HH=20;break;
                            case "L":HH=21;break;
                            case "M":HH=22;break;
                            case "N":HH=23;break;
                            default:continue;
                        }break;
                    }

                }
                if (HH<10){
                    if (MM<10){
                        System.out.println(weekday+" "+0+HH+":"+0+MM);break;
                    }else {
                        System.out.println(weekday+" "+0+HH+":"+MM);break;
                    }
                }else {
                    if (MM<10){
                        System.out.println(weekday+" "+HH+":"+0+MM);break;
                    }else {
                        System.out.println(weekday+" "+HH+":"+MM);break;
                    }
                }
            }
        }

    }
}

总结:

字符串的拆分:
1.函数.split("") 以括号内的字符为节点,将字符串分段(节点字符不会被返回)。若括号内为””则将字符串分割为单个字符的字符串(表现为单个字符,但类型依然为String)
2.
toCharArray
public char[] toCharArray()
将此字符串转换为一个新的字符数组。
返回:
一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。

范围判断【大小写字母】:
1.对字符char
形如 chars1[i] >= ‘A’ && chars1[i] <= 'Z’ 直接进行范围约束即可
2.对字符串string,使用.matches("[a-zA-Z]+")正则进行判断

if (a[i]==’\0’)可以判断字符型数组中char为空

题目描述
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入描述:
输入在一行中依次给出3个整数A、B和D。

输出描述:
输出A+B的D进制数。

参考答案1:

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        BigInteger A = new BigInteger(sc.nextInt()+"");
        BigInteger B = new BigInteger(sc.nextInt()+"");
        BigInteger D =  new BigInteger(sc.nextInt()+"");
        A = A.add(B);
        StringBuilder r = new StringBuilder();
        while(A.divide(D) != BigInteger.ZERO){
            r.append(A.remainder(D));
            A = A.divide(D);
        }
        r.append(A.remainder(D));
        r = r.reverse();
        System.out.println(r.toString());
    }
 
}

参考答案2:

import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int d=sc.nextInt();
        int c=a+b;
        String str="";
        while(c>0){
            int temp=c%d;
            str=temp+str;
            c=c/d;
        }
        System.out.print(str);
 
    }
 
}

我的答案:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        int b = input.nextInt();
        int d = input.nextInt();

        int c = a+b;
        String x = string10ToN(c,d);
        System.out.println(x);
    }


    public static String string10ToN(int tenRadix, int radix) {

        String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder buf = new StringBuilder();
        int remainder = 0;
        while (tenRadix != 0)
        {
            remainder = tenRadix % radix;// 求余数
            tenRadix = tenRadix / radix;// 除以基数
            buf.append(code.charAt(remainder));// 保存余数,记得要倒叙排列
        }
        buf.reverse();// 倒叙排列
        return buf.toString();
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值