首页 > 试题广场 >

ん...红茶?

[编程题]ん...红茶?
  • 热度指数:4271 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
高贵的蕾米莉亚大小姐每天需要饮用定量 B 型血的红茶以保持威严,并且要分两杯在不同时段饮用。
女仆长十六夜咲夜每天可以制作很多杯不同剂量 B 型血的红茶供蕾米莉亚大小姐饮用。
某日,你和天才妖精琪露诺偷偷潜入红魔馆被咲夜抓住,要求在今日份的红茶中挑出所有满足大小姐要求的茶杯,否则……

输入描述:
每个样例有三行输入,第一行输入表示茶杯个数,第二行输入表示每份茶杯里的 B 型血剂量,第三行表示大小姐今天的定量


输出描述:
对每一个样例,输出所有可能的搭配方案,如果有多种方案,请按每个方案的第一杯 B 型血剂量的大小升序排列。
如果无法找到任何一种满足大小姐的方案,输出"NO"(不包括引号)并换行。
示例1

输入

7
2 4 6 1 3 5 7
7

输出

1 6
2 5
3 4

备注:
茶杯个数不超过100000,保证茶杯里的B型血剂量两两不同。
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int count = in.nextInt();
            int[] nums = new int[count];
            for(int i = 0; i < count; i++){
                nums[i] = in.nextInt();
            }
            int target = in.nextInt();
            Arrays.sort(nums);
            //左右指针
            int left = 0;
            int right = nums.length - 1;
            StringBuilder res = new StringBuilder();
            while(left < right){
                int cur = nums[left] + nums[right];
                if(cur == target){
                    res.append(nums[left] + " " + nums[right] + "\n");
                    left++;
                    right--;
                }
                else if(cur < target){
                    left++;
                }
                else if(cur > target){
                    right--;
                }
            }
            //结果为空
            if(res.length() == 0){
                System.out.println("NO");
            }
            else{
                System.out.println(res);
            }
        }
    }
}
常规解法,排序+双指针。(就是95%后的测试用例什么情况,说不通过,但是我对比实际输出又显示一致。。
发表于 2021-01-26 13:35:14 回复(1)
95%以后的测试用例有问题。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * @Author: coderjjp
 * @Date: 2020-05-08 9:39
 * @Description: ん...红茶?
 * @version: 1.0
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.valueOf(br.readLine());
        String[] s = br.readLine().split(" ");
        int x[] = new int[n];
        for (int i = 0; i < n; i++)
            x[i] = Integer.valueOf(s[i]);
        int t = Integer.valueOf(br.readLine());
        Arrays.sort(x);
        int count = 0;
        int l = 0, r = n-1;
        while (l < r){
            if (x[l]+x[r] == t){
                count++;
                System.out.println(x[l]+" "+x[r]);
                l++;
                r--;
            }
            else if (x[l]+x[r] > t)
                r--;
            else
                l++;
        }
        if (count == 0)
            System.out.println("NO");
    }
}


发表于 2020-05-08 09:57:45 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");
        int need = Integer.parseInt(br.readLine());
        int[] blood = new int[n];
        for (int i = 0; i < blood.length; i++) {
            blood[i] = Integer.parseInt(s[i]);
        }
        Arrays.sort(blood);
        int left = 0;
        int right = n - 1;
        boolean flag = false;
        while (left < right) {
            if (blood[left] + blood[right] == need) {
                flag = true;
                System.out.println(blood[left] + " " + blood[right]);
                left++;
            } else if (blood[left] + blood[right] > need) {
                right--;
            } else {
                left++;
            }
        }
        if (!flag) {
            System.out.println("NO");
        }
    }
}
编辑于 2019-08-20 16:55:54 回复(0)

热门推荐

通过挑战的用户

查看代码
ん...红茶?