中科大机试

题目描述1

读入n个正整数,求出这n个数的最小值、最大值以及它们两的最大公约数,并输出。输入中第一行为n,接下来为n个大于零的整数。

输入

3
4 8 6

输出

4 8 4

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int mini=Integer.MAX_VALUE,maxi=0;
        for(int i=0;i<n;i++){
            int num=in.nextInt();
            mini=num<mini?num:mini;
            maxi=num>maxi?num:maxi;
        }
        System.out.print(mini+" "+maxi+" ");
        while(mini!=0){
            int p=maxi%mini;
            maxi=mini;
            mini=p;
        }
        System.out.print(maxi);
    }
}

题目描述2
输入描述:
输入包含多组测试数据。

每组第一行输入一个整数n(n<100000),表示有n个任务。

接下来n行,每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。
输出描述:
输出调度方式,输出如果有多种适合的调度方式,请输出字典序最小的一种。

输入

4
Task0(Task1,Task2)
Task1(Task3)
Task2(NULL)
Task3(NULL)

输出

Task0 Task1 Task2 Task3

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int n = sc.nextInt();
            int[] root = new int[n];
            for(int i = 0;i < n;i++) {
                root[i] = -1;
            }
            for(int i = 0;i < n;i++) {
                String s = sc.next();
                int p = Integer.parseInt(String.valueOf(s.charAt(4)));
                String sub = s.substring(6,s.length() - 1);
                if(sub.equals("NULL")) {
                    continue;
                }
                String[] arr = sub.split(",");
                for(int j = 0;j < arr.length;j++) {
                    int index = Integer.parseInt(String.valueOf(arr[j].charAt(4)));
                    root[index] = p;
                }
            }
            Queue<Integer> queue = new PriorityQueue<Integer>();
            for(int i = 0;i < n;i++) {
                if(root[i] == -1) {
                    queue.add(i);
                }
            }
            String s = "";
            while(!queue.isEmpty()) {
                int a = queue.poll();
                s = s + "Task" + a + " ";
                for(int i = 0;i < n;i++) {
                    if(a == root[i]) {
                        queue.add(i);
                    }
                }
            }
            System.out.println(s.trim());
        }
        sc.close();
    }
}

题目描述3
火车经过X站,火车最大载客人数为m,有n个订票请求,请求订购从a站到b站的k张票,若能满足订购要求则输出1,否则输出0。

输入描述
输入包含多组测试数据。

每组第一行输入两个数,分别为n,m。接下来有n行,每行三个数分别为a,b,k。

输出描述
输出相应的结果表示能否满足订购要求。

输入
5 10
4 10 9
8 12 2
8 12 1
14 20 8
30 300 15

输出
1
0
1
1
0

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            int n=in.nextInt();
            int m=in.nextInt();
            List<Integer> list_b=new ArrayList<Integer>();
            List<Integer> list_k=new ArrayList<Integer>();
            for(int i=0;i<n;i++){
                int a=in.nextInt();
                int b=in.nextInt();
                int k=in.nextInt();
                while(list_b.size()!=0&&a>list_b.get(0)){
                    m=m+list_k.get(0);
                    list_b.remove(0);
                    list_k.remove(0);
                }
                if(k<=m){
                    m=m-k;
                    list_b.add(b);
                    list_k.add(k);
                    System.out.println("1");
                }else{
                    System.out.println("0");
                }
            }
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值