1. 程式人生 > 其它 >Problem:找硬幣

Problem:找硬幣

技術標籤:演算法c++

題目描述

伊娃喜歡從整個宇宙中收集硬幣。

有一天,她去了一家宇宙購物中心購物,結賬時可以使用各種硬幣付款。

但是,有一個特殊的付款要求:每張帳單,她只能使用恰好兩個硬幣來準確的支付消費金額。

給定她擁有的所有硬幣的面額,請你幫她確定對於給定的金額,她是否可以找到兩個硬幣來支付。

輸入格式

第一行包含兩個整數 N 和 M,分別表示硬幣數量以及需要支付的金額。

第二行包含 N 個整數,表示每個硬幣的面額。

輸出格式

輸出一行,包含兩個整數 V1,V2,表示所選的兩個硬幣的面額,使得 V1≤V2 並且 V1 + V2 = M。

如果答案不唯一,則輸出 V1 最小的解。

如果無解,則輸出 No Solution

資料範圍

在這裡插入圖片描述

輸入樣例1

在這裡插入圖片描述

輸出樣例1

在這裡插入圖片描述

輸入樣例2

在這裡插入圖片描述

輸出樣例2

在這裡插入圖片描述

思路

雙指標

程式程式碼

#include <iostream>
#include <algorithm>

using namespace std;

const int x = 1e5 + 10;

int N, M;
int n[x];

int main()
{
    cin >> N >> M;
    for(int i = 0; i < N; ++ i)
        cin >> n[i]; //輸入

    sort
(n, n + N); //排序 int sum; for(int i = 0, j = N - 1; i < j;) //雙指標 { sum = n[i] + n[j]; if(sum > M) { j --; continue; } if(sum < M) { i ++; continue; } if(sum == M) {
cout << n[i] << ' ' << n[j] << endl; return 0; } } cout << "No Solution" << endl; return 0; }
  • 若有問題,歡迎交流