头像

武汉工程科技学院




离线:2小时前


活动打卡代码 AcWing 1504. 火星颜色


2小时前

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String restemp=input.nextLine();
        String []arr=restemp.split("\\s+");
        String res="#";
        for(int i=0;i<3;i++) {
            if(arr[i].equals("0")){
                res+="00";
            }
            else {
                String temp = turn(arr[i]);

                if (temp.length() < 2)
                    res += "0";
                res += temp;
            }
        }
        System.out.println(res);

    }
    public static String turn(String num){
        int num2=Integer.parseInt(num);
        String res="";
        String temp="";
        while (num2>0){
            char tempnum=get(num2%13);
            temp+=tempnum;
            num2/=13;
        }
        for(int i=temp.length()-1;i>=0;i--){
            res+=temp.charAt(i);
        }
        return res;
    }
    public static char get(int num){
        ;
        if(num>=0&&num<=9){
            return  (char) ('0'+num);
        }
        else return (char)(num-10+'A');
    }
}



活动打卡代码 AcWing 1482. 进制


1天前

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int arr[]=new int[300];
        String str=input.nextLine();
        String []arrstr=str.split("\\s+");
        String N1=arrstr[0];
        String N2=arrstr[1];
        long target=0;

        int tag=Integer.parseInt(arrstr[2]);
        long radix=Long.parseLong(arrstr[3]);
          if(tag==2)
          {
             N1=arrstr[1];
             N2=arrstr[0];

          }
          //把N1 radix进制转换成10进制数,得target,再去找N2的多少进制下的十进制数与target相等
           target =turn(N1,radix);
          //然后二分,二分的左边界就是temp1里面最大数加1,例如一个6 它的最低进制就是7进制
        long l=2;
        for(int i=0;i<N2.length();i++){
        l=Math.max(get(N2.charAt(i))+1,l);
        }
        long r=target;   //右边界就是N1转化为十进制的最大值
        //然后二分
        while (l<r){
            long mid=(l+r)/2;
            //将N2的mid进制转化为10进制
            if(turn(N2,mid)>=target)r=mid;
            else l=mid+1;

        }
        if(turn(N2,l)!=target)
            System.out.println("Impossible");
        else
            System.out.println(l);

    }

    public static long  turn(String num,long radix){//秦九韶算法 ,转为10进制
        long res =0;
        for(int i=0;i<num.length();i++){

            double res2=(res*radix+get(num.charAt(i)));
            if(res2>Math.pow(10,16)||res2<0)
                return (long) Math.pow(10,18);
            res=res*radix+get(num.charAt(i));
        }
        return  res;

    }
   public static long get(char n){
        if(n<='9')
            return n-'0';
        else return n-'a'+10;
   }
}



活动打卡代码 AcWing 1629. 延迟的回文数


3天前


import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String num = input.next();

        char[] arrnum = num.toCharArray();
        ArrayList<Integer> arr1 = new ArrayList<>();
        for (int i = 0; i < arrnum.length; i++) {
            arr1.add(arrnum[i] - '0');
        }
        if (arr1.size() == 1 || check(arr1)) {
            System.out.println(num+" is a palindromic number.");

        } else
        {

            int count = 1;
            int flag = 0;
            while (count <= 10) {
                ArrayList<Integer> arr2 = (ArrayList<Integer>) arr1.clone();//复制arr1用于翻转
                Collections.reverse(arr2);
                ArrayList<Integer> arr3 = new ArrayList<>();//用于存相加的结果
                //相加,从尾部开始
                int t = 0;//相加会有进位,起始进位为0;
                for (int i = arr2.size() - 1; i >= 0; i--) {
                    int temp1 = arr1.get(i);
                    int temp2 = arr2.get(i);
                    int res = temp1 + temp2 + t;
                    t = res / 10;
                    res %= 10;
                    arr3.add(res);

                }
                if (t > 0) arr3.add(1);//67+76=143,如果最后还有进位就要在开头加1
                //因为我们是从最后面开始相加,所以arr3与正确的结果相反
                Collections.reverse(arr3);
                if (check(arr3)) {
                    flag = 1;
                    for (int i = 0; i < arr1.size(); i++) {
                        System.out.print(arr1.get(i));
                    }
                    System.out.print(" + ");
                    for (int i = 0; i < arr2.size(); i++) {
                        System.out.print(arr2.get(i));
                    }
                    System.out.print(" = ");
                    for (int i = 0; i < arr3.size(); i++) {
                        System.out.print(arr3.get(i));
                    }
                    System.out.println();
                    arr1 = (ArrayList<Integer>) arr3.clone();//更新arr1
                    break;
                }

                count++;
                for (int i = 0; i < arr1.size(); i++) {
                    System.out.print(arr1.get(i));
                }
                System.out.print(" + ");
                for (int i = 0; i < arr2.size(); i++) {
                    System.out.print(arr2.get(i));
                }
                System.out.print(" = ");
                for (int i = 0; i < arr3.size(); i++) {
                    System.out.print(arr3.get(i));
                }
                System.out.println();
                arr1 = (ArrayList<Integer>) arr3.clone();//更新arr1
            }
            //如果可以通过算法形成回文,则输出最开始的,否则输出最后的
            if (flag == 1) {
                for (int i = 0; i < arr1.size(); i++) {
                    System.out.print(arr1.get(i));
                }

                System.out.println(" is a palindromic number.");
            } else {

                System.out.println("Not found in 10 iterations.");
            }
        }
    }

    public static boolean check(ArrayList<Integer> arr){
        ArrayList<Integer>temp=(ArrayList<Integer>)arr.clone();
        Collections.reverse(temp);
        if(temp.equals(arr)){
            return true;
        }
        else
            return false;
    }
}





3天前


import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String tempa=input.next();
        String tempb=input.next();
        String a[]=tempa.split("\\.");
        String b[]=tempb.split("\\.");
        ArrayList<Integer> arr1=new ArrayList<>();
        ArrayList<Integer> arr2=new ArrayList<>();
        ArrayList<Integer> res=new ArrayList<>();
        for(int i=0;i<a.length;i++){
            arr1.add(Integer.parseInt(a[i]));
        }
        for(int i=0;i<b.length;i++){
            arr2.add(Integer.parseInt(b[i]));
        }
        /*
        17 个银镰刀(Sickle)可以换 1 个帆船(Galleon),29 个克努特(Knut)可以换 1 个银镰刀。”
        G S K
         */
        //先转换K
        int tempK1=arr1.get(2);
        int tempK2=arr2.get(2);
        int tK=0;//看是否有进位
        int resK=tempK1+tempK2;
        tK=resK/29;
        resK%=29;
        res.add(resK);
        //先转换S
        int tempS1=arr1.get(1);
        int tempS2=arr2.get(1);
        int tS=0;//看是否有进位
        int resS=tempS1+tempS2+tK;//加上之前的进位
        tS=resS/17;
        resS%=17;
        res.add(resS);
        //先转换G
        int tempG1=arr1.get(0);
        int tempG2=arr2.get(0);
        int tG=0;//看是否有进位
        int resG=tempG1+tempG2+tS;

        res.add(resG);
        if(tG>0)
            res.add(1);//开头的帆船两个有进位的情况
        Collections.reverse(res);
        for(int i=0;i<res.size();i++){
            if(i!=res.size()-1)
            System.out.print(res.get(i)+".");
            else
                System.out.println(res.get(i));
        }


    }
}



活动打卡代码 AcWing 1501. 回文数


3天前


import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String num = input.next();
        int k = input.nextInt();
        char[] arrnum = num.toCharArray();
        ArrayList<Integer> arr1 = new ArrayList<>();
        for (int i = 0; i < arrnum.length; i++) {
            arr1.add(arrnum[i] - '0');
        }
        if (arr1.size() == 1 || check(arr1)) {
            System.out.println(num);
            System.out.println("0");
        } else 
            {

            int count = 1;
            int flag = 0;
            while (count <= k) {
                ArrayList<Integer> arr2 = (ArrayList<Integer>) arr1.clone();//复制arr1用于翻转
                Collections.reverse(arr2);
                ArrayList<Integer> arr3 = new ArrayList<>();//用于存相加的结果
                //相加,从尾部开始
                int t = 0;//相加会有进位,起始进位为0;
                for (int i = arr2.size() - 1; i >= 0; i--) {
                    int temp1 = arr1.get(i);
                    int temp2 = arr2.get(i);
                    int res = temp1 + temp2 + t;
                    t = res / 10;
                    res %= 10;
                    arr3.add(res);

                }
                if (t > 0) arr3.add(1);//67+76=143,如果最后还有进位就要在开头加1
                //因为我们是从最后面开始相加,所以arr3与正确的结果相反
                Collections.reverse(arr3);
                arr1 = (ArrayList<Integer>) arr3.clone();//更新arr1
                if (check(arr3)) {
                    flag = 1;
                    break;
                }
                count++;
            }
            //如果可以通过算法形成回文,则输出最开始的,否则输出最后的
            if (flag == 1) {
                for (int i = 0; i < arr1.size(); i++) {
                    System.out.print(arr1.get(i));
                }
                System.out.println();
                System.out.println(count);
            } else {
                for (int i = 0; i < arr1.size(); i++) {
                    System.out.print(arr1.get(i));
                }
                System.out.println();
                System.out.print(k);
            }
        }
    }

    public static boolean check(ArrayList<Integer> arr){
        ArrayList<Integer>temp=(ArrayList<Integer>)arr.clone();
        Collections.reverse(temp);
        if(temp.equals(arr)){
            return true;
        }
        else
            return false;
    }
}



活动打卡代码 AcWing 1500. 趣味数字


3天前

import javax.print.DocFlavor;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        //长度为最长为100,所以要用一个容器存,字符串处理
        String num=input.next();
        ArrayList<Integer> arr=new ArrayList<>();//加倍前的
        ArrayList<Integer> arr2=new ArrayList<>();//加倍后的
        char []arrnum=num.toCharArray();
        for(int i=0;i<num.length();i++){
            arr.add(arrnum[i]-'0');
        }
        //存进去之后,加倍,加倍时注意要有进位
        int  t=0;//进位t,起始位0;
        for(int i=arr.size()-1;i>=0;i--){
            int temp=arr.get(i)*2+t;//看上一次运算有没有进位
            int temp2=0;//假设temp>=10,说明有进位,则temp2就是temp的个位
            temp2=temp%10;
            t=temp/10;
            arr2.add(temp2);
        }
        if(t>0)
            arr2.add(1);//如果第一位有进位,则在开头加1;
        //克隆
        // ArrayList<Student> listCopy=(ArrayList<Student>) list.clone();
        ArrayList<Integer>arr3=(ArrayList<Integer>)arr2.clone();//用于将arr2存起来,看是否相等
        Collections.sort(arr);
        Collections.sort(arr3);
        if(arr.equals(arr3))
            System.out.println("Yes");
        else System.out.println("No");
        //反向输出,因为刚刚加倍的时候从尾巴开始的
        for(int i=arr2.size()-1;i>=0;i--){
            System.out.print(arr2.get(i));
        }
    }
}





4天前

题目链接 PAT甲级多项式相乘
这个测试案例有时向上取整有时向下取整,有两个点就卡在那,请问大佬怎么改

两分代码都过不去,第二份在官网上能过去
错误的代码:

一:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        BigDecimal []arr=new BigDecimal[1010];
        BigDecimal []arr2=new BigDecimal[1010];
        BigDecimal []res=new BigDecimal[2020];
        for(int i=0;i<1010;i++){
            arr[i]=BigDecimal.ZERO;
            arr2[i]=BigDecimal.ZERO;
        }
        for(int i=0;i<2020;i++){
            res[i]=BigDecimal.ZERO;
        }
        int n=input.nextInt();
        for(int i=0;i<n;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
            arr[N]=arr[N].add(a);
        }
        int m=input.nextInt();
        for(int i=0;i<m;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
            arr2[N]=arr2[N].add(a);
        }
        BigDecimal e=new BigDecimal("0");
        for(int i=0;i<1010;i++){
            for(int j=0;j<1010;j++){
                {
                    //系数相乘指数相加
                    if (!arr[i].equals(e)&&!arr2[j].equals(e)) {
                        BigDecimal temp = arr[i].multiply(arr2[j]);
                        res[i + j] = res[i + j].add(temp);
                    }
                }
            }
        }
        int k=0;

        for(int i=0;i<2020;i++){
            if(!res[i].equals(e)){
                k++;
            }
        }
        System.out.print(k);
        for(int i=2019;i>=0;i--){
            if(!res[i].equals(e)){
                BigDecimal result=res[i].setScale(1, RoundingMode.HALF_UP);
            System.out.print(" "+i+" "+result);
            }
        }

    }
}

二:


    import java.text.DecimalFormat;
    import java.util.Scanner;

    public class Main {

        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double[] f1 = new double[1010];
            double[] f2 = new double[1010];
            double[] f3 = new double[2020];
            int n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f1[index] = in.nextDouble();
            }
            n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f2[index] = in.nextDouble();
            }
            for(int i = 0; i<1010; i++){
                if(f1[i]!=0.0){
                    for(int j = 0; j<1010; j++){
                        if(f2[j]!=0.0){
                            f3[i+j] += f1[i]*f2[j];
                        }
                    }
                }
            }
            int cnt = 0;
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0)
                    cnt++;
            }
            System.out.print(cnt);
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0){
                    System.out.print(" "+i+" ");
                    System.out.printf("%.1f",f3[i]);
                }

            }
            System.out.println();
        }

    }






活动打卡代码 AcWing 1481. 多项式乘积


4天前

    import java.text.DecimalFormat;
    import java.util.Scanner;

    public class Main {

        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double[] f1 = new double[1010];
            double[] f2 = new double[1010];
            double[] f3 = new double[2020];
            int n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f1[index] = in.nextDouble();
            }
            n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f2[index] = in.nextDouble();
            }
            for(int i = 0; i<1010; i++){
                if(f1[i]!=0.0){
                    for(int j = 0; j<1010; j++){
                        if(f2[j]!=0.0){
                            f3[i+j] += f1[i]*f2[j];
                        }
                    }
                }
            }
            int cnt = 0;
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0)
                    cnt++;
            }
            System.out.print(cnt);
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0){
                    System.out.print(" "+i+" ");
                    System.out.printf("%.1f",f3[i]);
                }

            }
            System.out.println();
        }

    }


活动打卡代码 AcWing 1474. 多项式 A + B


4天前


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        BigDecimal []arr=new BigDecimal[1010];
        for(int i=0;i<1010;i++){
            arr[i]=BigDecimal.ZERO;
        }
        int n=input.nextInt();
        for(int i=0;i<n;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
            BigDecimal temp=arr[N];
            arr[N] =arr[N].add(a);
        }
        int m=input.nextInt();
        for(int i=0;i<m;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
           arr[N] =arr[N].add(a);
        }
        int k=0;
        BigDecimal e=new BigDecimal("0");
        for(int i=0;i<1010;i++){
            if(!arr[i].equals(e)){
                k++;
            }
        }
        System.out.print(k);
        for(int i=1009;i>=0;i--){
            if(!arr[i].equals(e)){
                BigDecimal result=arr[i].setScale(1, RoundingMode.HALF_UP);
            System.out.print(" "+i+" "+result);
            }
        }

    }
}



活动打卡代码 AcWing 1546. 它们是否相等


5天前


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String temp=reader.readLine();
        String []arr=temp.split("\\s+");
        int N=Integer.parseInt(arr[0]);
        String A=turn(arr[1],N);
        String B=turn(arr[2],N);
        if(A.equals(B)){
            System.out.println("YES "+A);
        }
        else {
            System.out.println("NO "+A+" "+B);
        }

    }
    public static String turn (String word,int N){
        //先找小数点的位置,如果没有就在最后面补上,把所有数字转换成同一类
        int index=word.indexOf(".");
        if(index==-1){
            word+=".";
            index=word.indexOf(".");
        }
        String a=word.substring(0,index)+word.substring(index+1);
        word=a;

        //去除前面所有的0,最后题目要输出的0.XXX这个0.我们直接在输出语句中输出
        while(word.length()>=1&&word.charAt(0)=='0')
        {
            word=word.substring(1);
            index--;
        };
        //如果这个数是0,k就直接为0;
        if(word.length()==0)
            index=0;
        //然后截取N位
        if(word.length()>N)
            word=word.substring(0,N);
        else{//不够的话补上0
            int length=word.length();
            for(int i=0;i<N-length;i++){
                word+="0";
            }

        }
        return  "0."+word+"*10^"+index;

    }
}