Problem:找硬幣
阿新 • • 發佈:2021-02-09
題目描述
伊娃喜歡從整個宇宙中收集硬幣。
有一天,她去了一家宇宙購物中心購物,結賬時可以使用各種硬幣付款。
但是,有一個特殊的付款要求:每張帳單,她只能使用恰好兩個硬幣來準確的支付消費金額。
給定她擁有的所有硬幣的面額,請你幫她確定對於給定的金額,她是否可以找到兩個硬幣來支付。
輸入格式
第一行包含兩個整數 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;
}
- 若有問題,歡迎交流