0
点赞
收藏
分享

微信扫一扫

PAT_甲级_1048 Find Coins (25分) (C++)【签到题/排序/双指针】


目录

​​1,题目描述​​

​​ 题目大意​​

​​2,思路​​

​​3,代码​​

1,题目描述

PAT_甲级_1048 Find Coins (25分) (C++)【签到题/排序/双指针】_1048

Sample Input 1:

8 15
1 2 8 7 2 4 11 15

 

Sample Output 1:

4 11

 

Sample Input 2:

7 14
1 8 7 2 4 11 15

 

Sample Output 2:

No Solution

 题目大意

给出一系列数字代表每枚硬币的价值,同时给出需要支付的金额M。求价值等于M的两个硬币,若方案不唯一,输出硬币对中包含最小价值硬币的一组。

 

2,思路

先将所给的硬币按照价格排序;

声明左右两个指针i,j。若两指针所指位置的硬币价值之和sum==M,直接输出i和j;若sum>M,j--;若sum<M,i++;

 

3,代码

#include<iostream>
#include<vector>
#include<string.h>
#include<map>
#include<math.h>
#include<algorithm>
#include<climits>
using namespace std;

bool cmp1(int a, int b){
return a < b;
}

int main(){
//#ifdef ONLINE_JUDGE
//#else
// freopen("1.txt", "r", stdin);
//#endif

int N, M;
cin>>N>>M;

vector<int> data;
int num;
for(int i = 0; i < N; i++){
scanf("%d", &num);
data.push_back(num);
}
sort(data.begin(), data.end(), cmp1);

int i = 0, j = N -1;
while(i < j){//<
if(data[i] + data[j] == M){
printf("%d %d", data[i], data[j]);
return 0;
}else if(data[i] + data[j] < M)
i++;
else
j--;
}

printf("No Solution");
return 0;
}

 

举报

相关推荐

1048 Find Coins (25 分)

0 条评论