攀拓甲级真题练习 (1001 - 1005)

1001 A+B Format

请添加图片描述

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        String s = Integer.toString(a + b);
        int len = s.length();
        int mod = len % 3;
        for (int i = 0; i < len; i++) {
            System.out.print(s.charAt(i));
            if (s.charAt(i) != '-' && (i + 1) % 3 == mod && i != len - 1) {
                System.out.print(",");
            }
        }
    }
}

1002 A+B for Polynomials

请添加图片描述

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float[] coefficients = new float[1001];
        int termCount, exponent;
        float coefficient;

        for (int i = 0; i < 2; i++) {
            termCount = scanner.nextInt();
            for (int j = 0; j < termCount; j++) {
                exponent = scanner.nextInt();
                coefficient = scanner.nextFloat();
                coefficients[exponent] += coefficient;
            }
        }

        int nonZeroCount = 0;
        for (float coeff : coefficients) {
            if (coeff != 0) nonZeroCount++;
        }

        System.out.print(nonZeroCount);
        for (int i = 1000; i >= 0; i--) {
            if (coefficients[i] != 0) {
                System.out.printf(" %d %.1f", i, coefficients[i]);
            }
        }
    }
}

1003 Emergency

请添加图片描述

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), m = scanner.nextInt();
        int start = scanner.nextInt(), end = scanner.nextInt();
        int[] rescueTeams = new int[n];
        for (int i = 0; i < n; i++) rescueTeams[i] = scanner.nextInt();
        
        int[][] graph = new int[n][n];
        for (int i = 0; i < n; i++) Arrays.fill(graph[i], Integer.MAX_VALUE);
        
        for (int i = 0; i < m; i++) {
            int u = scanner.nextInt(), v = scanner.nextInt(), len = scanner.nextInt();
            graph[u][v] = len;
            graph[v][u] = len;
        }
        
        int[] dist = new int[n], maxTeams = new int[n], paths = new int[n];
        boolean[] visited = new boolean[n];
        Arrays.fill(dist, Integer.MAX_VALUE);
        dist[start] = 0;
        maxTeams[start] = rescueTeams[start];
        paths[start] = 1;

        PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
        pq.add(new int[]{start, 0, rescueTeams[start]});
        
        while (!pq.isEmpty()) {
            int[] current = pq.poll();
            int city = current[0];
            if (visited[city]) continue;
            visited[city] = true;
            
            for (int v = 0; v < n; v++) {
                if (!visited[v] && graph[city][v] != Integer.MAX_VALUE) {
                    int newDist = dist[city] + graph[city][v];
                    if (newDist < dist[v]) {
                        dist[v] = newDist;
                        maxTeams[v] = maxTeams[city] + rescueTeams[v];
                        paths[v] = paths[city];
                        pq.add(new int[]{v, newDist, maxTeams[v]});
                    } else if (newDist == dist[v]) {
                        if (maxTeams[city] + rescueTeams[v] > maxTeams[v])
                            maxTeams[v] = maxTeams[city] + rescueTeams[v];
                        paths[v] += paths[city];
                    }
                }
            }

            if (city == end) break;
        }
        
        System.out.println(paths[end] + " " + maxTeams[end]);
    }
}

1004 Counting Leaves

请添加图片描述

import java.util.*;

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

        int N = scanner.nextInt();
        int M = scanner.nextInt();

        Map<String, List<String>> tree = new HashMap<>();
        tree.put("01", new ArrayList<>()); 

        for (int i = 0; i < M; i++) {
            String id = scanner.next();
            int K = scanner.nextInt();
            tree.putIfAbsent(id, new ArrayList<>());

            for (int j = 0; j < K; j++) {
                String childId = scanner.next();
                tree.putIfAbsent(childId, new ArrayList<>());
                tree.get(id).add(childId);
            }
        }

        List<Integer> result = new ArrayList<>();
        Queue<String> queue = new LinkedList<>();
        queue.add("01");

        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            int leafCount = 0;

            for (int i = 0; i < levelSize; i++) {
                String nodeId = queue.poll();
                List<String> children = tree.get(nodeId);

                if (children.isEmpty()) {
                    leafCount++;
                } else {
                    queue.addAll(children);
                }
            }

            result.add(leafCount);
        }

        for (int i = 0; i < result.size(); i++) {
            if (i > 0) System.out.print(" ");
            System.out.print(result.get(i));
        }
        scanner.close();
    }
}

1005 Spell It Right

请添加图片描述

import java.util.Scanner;

public class Main {

    private static final String[] DIGIT_WORDS = {
        "zero", "one", "two", "three", "four",
        "five", "six", "seven", "eight", "nine"
    };

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String number = scanner.next();
    
        int sum = 0;
        for (char c : number.toCharArray()) {
            sum += c - '0'; 
        }
        
        String sumStr = Integer.toString(sum);
        StringBuilder result = new StringBuilder();
        
        for (int i = 0; i < sumStr.length(); i++) {
            if (i > 0) {
                result.append(" ");
            }
            int digit = sumStr.charAt(i) - '0';
            result.append(DIGIT_WORDS[digit]);
        }
        
        System.out.println(result.toString());
        scanner.close();
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值