科大讯飞(7.31)

科大讯飞:
1,有面值1,5,10,50,100,分别对应变量:a、b、c、d、e
若有k元钱,最少多少张纸币能找零,若不能则输出-1。



public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int[] a=new int[5];
        Map<Integer,Integer> map=new HashMap<>();
        int[] b={1,5,10,50,100};
        for(int i=0;i<5;i++) {
            a[i] = sc.nextInt();
            map.put(b[i],a[i]);
        }
        int k=sc.nextInt();
        System.out.println(help(b,k,0,map));
    }
    public static int help(int[] b,int k,int sum,Map<Integer,Integer> map) {
        if (k == 0) {
            return sum;
        }
        for (int i = 4; i >= 0; i--) {
            if (b[i] <= k) {
                int temp = map.get(b[i]);
                if (temp > 0) {
                    k -= b[i];
                    sum++;
                    map.put(b[i], temp - 1);
                    return help(b, k, sum, map);
                }
            }
        }
        return -1;
    }

2,
9
25 84 21 47 15 27 68 35 20

用快排:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = in.nextInt();
        }
        quickSort(array, 0, n - 1);
    }

    public static void quickSort(int[] array, int left, int right) {
               // 改动就在这里,之前写的是left > right
        if (left >=right) {
            return;
        }
        int key = array[left];
        int i = left;
        int j = right;
        while (i < j) {
            while (i < j && array[j] >= key) {
                j--;
            }
            while (i < j && array[i] <= key) {
                i++;
            }
            if (i < j) {
                swap(array, i, j);
            }
        }
        swap(array, left, j);
        for (int k = 0; k < array.length; k++) {
            if (k == 0) {
                System.out.print(array[k]);

            } else {
                System.out.print(" " + array[k]);
            }

        }
        System.out.println();
        quickSort(array, left, i - 1);
        quickSort(array, j + 1, right);
    }

    public static void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}  

3,矩形是否相交
给定坐标:(0,0),(2,3),(1,2),(5,4)
判断前两个点对角线构成的矩形是否与后两个点构成的矩形相交
相交则输出1,否则输出0

作者:Sun浅雨
链接:https://www.nowcoder.com/discuss/463725?type=post&order=time&pos=&page=3&channel=666&source_id=search_post
来源:牛客网

直接模拟判断出为0的情况:
第二个矩形两个点的横坐标同时大于第一个矩形第二个点的横坐标为不相交
第二个矩形两个点的横坐标同时小于第一个矩形第一个点的横坐标为不相交
第二个矩形两个点的纵坐标同时大于第一个矩形第二个点的纵坐标为不相交
第二个矩形两个点的纵坐标同时小于第一个矩形第一个点的纵坐标为不相交


//直接判断矩形左上角和右下角的点是不是在另一个矩形里面
Scanner sc = new Scanner(System.in);
int xTR = sc.nextInt();
int xTC = sc.nextInt();
int xDR = sc.nextInt();
int xDC = sc.nextInt();
int yTR = sc.nextInt();
int yTC = sc.nextInt();
int yDR = sc.nextInt();
int yDC = sc.nextInt();
if(yTR >= xTR && yTR <= xDR && yTC >= xTC && yTC <= xDC) {
    System.out.println(1);
} else if(yDR >= xTR && yDR <= xDR && yDC >= xTC && yDC <= xDC) {
    System.out.println(1);
} else {
    System.out.println(0);
}

4,字符串中提取整数
例如:+1a2
输出:12

例如:-1a2
输出:-12

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string = in.nextLine();
        int length = string.length();
        int flag = 0;
        for (int i = 0; i < length; i++) {
            if (flag == 0 && string.charAt(i) == '-') {
                System.out.print(string.charAt(i));
            }
            if (string.charAt(i) >= 48 && string.charAt(i) <= 57) {
                if (flag == 0 && string.charAt(i) == 48) {
                    continue;
                }
                flag++;
                System.out.print(string.charAt(i));
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值