题目链接
PAT甲级1048
题目大意:给出n个正整数和一个正整数m,问n个数字中是否存在一对数字a和b(a <= b),使a+b=m成立。如果有多个,输出a最小的那一对。
分析:建立数组a保存每个数字出现的次数,然后判断输出
#include<iostream>
using namespace std;
//初始化为0
int a[1001];
int main(){
int n,m,temp;
scanf("%d %d",&n,&m);
for(int i = 0;i<n;++i){
scanf("%d",&temp);
a[temp]++;
}
for(int i = 0;i<1001;++i){
if(a[i]){
a[i]--; //如果是m=4,数组中有1个2,a[i]--表示没有可复用的2了
if(m>i&&a[m-i]){
printf("%d %d",i,m-i);
return 0;
}
a[i]++;
}
}
printf("No Solution");
return 0;
}
//这里有一个a[i]--和a[i]--.
//如果是m=4,数组中只有1个2,a[i]--表示没有可复用的2了
a[i]--;
if(m>i&&a[m-i]){
printf("%d %d",i,m-i);
return 0;
}
a[i]++;
本文解析PAT甲级1048题目,探讨如何通过建立数组记录数字出现次数,寻找两个数之和等于给定目标值m的解。采用C++实现,确保输出a最小的一对数字。

409

被折叠的 条评论
为什么被折叠?



