第三届传智杯程序设计赛B组题解Java版

第三届传智杯程序设计赛B组初赛题解Java版

文章目录

  • 第三届传智杯程序设计赛B组初赛题解Java版
    • A - 课程报名
    • B - 期末考试成绩
    • C - 志愿者
    • D - 终端
    • E - 运气

A - 课程报名

第三届传智杯程序设计赛B组题解Java版_第1张图片

import java.util.Scanner;

public class Main {
     
    public static void main(String[] args) {
     
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();	// 总可买人数n 
        int v = in.nextInt();	// 初始定价 
        int m = in.nextInt();	// 每m个人提升一次价格 
        int a = in.nextInt();	// 每次提升a元 
        int sum = 0;
        int temp = 1;
        for(int i=0;i<n;i++){
     
            if(i==m*temp){
     
                temp++;
            }
            sum+=v+(temp-1)*a;
        }
        System.out.println(sum);
    }
}

B - 期末考试成绩

第三届传智杯程序设计赛B组题解Java版_第2张图片

import java.util.Scanner;

public class Main {
     
    public static void main(String[] args) {
     
        Scanner in = new Scanner(System.in);
        double gpa = 0.0;
        int temp = 0;
        int course = 0;
        int x = in.nextInt();
        if(x >=90){
     
            gpa = 4.0;
        }else if(x>=60 && x<=89){
     
            temp = 90 - x;
            gpa = 4.0 - temp*0.1;
        }else{
     
            course = (int)Math.floor(Math.sqrt(x)*10);
            if(course >=90){
     
                gpa = 4.0;
            }else if(course>=60 && course<=89){
     
                temp = 90 - course;
                gpa = 4.0 - temp*0.1;
            }else{
     
                gpa = 0.0;
            }
        }
        System.out.println(String.format("%.1f",gpa));
    }
}

C - 志愿者

第三届传智杯程序设计赛B组题解Java版_第3张图片

import java.util.Arrays;
import java.util.Scanner;

public class Main {
     
    public static void main(String[] args) {
     
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Volunteer[] volunteerList = new Volunteer[n];
        for(int i=0;i<n;i++){
     
            int t = in.nextInt();
            int k = in.nextInt();
            volunteerList[i] = new Volunteer();
            volunteerList[i].i = (i+1);
            volunteerList[i].t = t;
            volunteerList[i].k = k;
            volunteerList[i].tk = (t*k);
        }
        Arrays.sort(volunteerList);
        for(int i=0;i<n;i++){
     
            if(i!=(n-1))
                System.out.print(volunteerList[i].i+" ");
            else
                System.out.print(volunteerList[i].i);
        }
    }
    static class Volunteer implements Comparable<Volunteer>{
     
        public int i;   // 志愿者编号
        public int t;   // 工作时长
        public int k;   // 难度系数
        public int tk;  // 贡献
        
        // 排序的比较方法

        /**
         * 相同贡献度的比时长 长的在前
         * 相同时长的比编号 小的在前
         */
        @Override
        public int compareTo(Volunteer b) {
     
            if(this.tk > b.tk){
     
                return -1;
            }else if(this.tk == b.tk){
     
                if(this.t > b.t){
     
                    return -1;
                }else if(this.t == b.t){
     
                    if(this.i < b.i)
                        return -1;
                }
            }
            return 1;
        }
    }
}

D - 终端

第三届传智杯程序设计赛B组题解Java版_第4张图片

import java.util.*;

/**
 * 使用ArrayList
 * 利用其下标顺序来代替文件创建的先后顺序
 * touch:向list中新增一个元素
 * rename:将指定下标重新赋值
 * rm:删除list中元素 
 *      元素的相对顺序不会发生改变 参照ArrayList源码fastRemove 将删除位置后的元素统统向前拷贝 并将最后一位置为null
 * ls:遍历数组元素
 */
public class Main {
     
    public static void main(String[] args) {
     
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        List<String> fileSystem = new ArrayList<>();
        for (int i = 0; i < n; i++) {
     
            String file = null;
            String command = in.next();
            if (!"ls".equals(command))
                file = in.next();
            if ("touch".equals(command)){
     
                if (file != null){
     
                    fileSystem.add(file);
                }
            }else if ("rm".equals(command)){
     
                if (file != null){
     
                    if (fileSystem.contains(file)){
     
                        fileSystem.remove(file);
                    }
                }
            }else if ("ls".equals(command)){
     
                for (String s : fileSystem) {
     
                    System.out.println(s);
                }
            }else{
     
                String newfile = in.next();
                if (file != null){
     
                    if (fileSystem.contains(file) && !fileSystem.contains(newfile)) {
     
                        for (int j = fileSystem.size() - 1; j >= 0 ; j--) {
     
                            if (fileSystem.get(j).equals(file)){
     
                                fileSystem.set(j,newfile);
                            }
                        }
                    }
                }
            }
        }
    }
}

E - 运气

第三届传智杯程序设计赛B组题解Java版_第5张图片

import java.util.*;

/**
 * 深度优先遍历
 * 每次遍历到终止条件时判断一下是否是k的倍数 如果是将结果值+1 不是 直接return
 * 最后将解按指定规则处理
 */
public class Main {
     
    private static int n;
    private static int k;
    private static long res;
    public static void main(String[] args) {
     
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        k = in.nextInt();
        if (n == 0){
     
            return;
        }
        dfs(0,"");
        System.out.println((long) (res%(Math.pow(10,9)+7)));
    }

    private static void check(String number){
     
        long parseLong = Long.parseLong(number);
        if (parseLong%k == 0){
     
            res++;
        }
    }

    private static void dfs(int level, String number) {
     
        if (level == n){
     
            check(number);
            return;
        }
        for (int i = 1; i <= 6; i++) {
     
            dfs(level+1,number+i);
        }
    }
}

你可能感兴趣的:(算法题,java,数据结构,算法,acm竞赛)