前言
自己记录归类一下刷题出现的问题,本篇文章主要总结pat刷题中出现的段错误及其解决方式。
a1048
报错:
后面才发现竟然重复提交还是疯狂轮流段错误
代码如下
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int N,M,coin[100005];
int HashTable[505] = {0}; //不能只开500,M-coin[i]有可能大于500!!!
bool cmp(int a, int b){
if(a != b) return a < b;
}
int main(){
scanf("%d %d",&N,&M);
int index;
for(int i = 0; i < N; i++){
scanf("%d",&coin[i]);
HashTable[coin[i]]++;
}
sort(coin, coin + N,cmp);
int i;
for(i = 0; i < N; i++){
if(coin[i] >= M) continue;
if(coin[i] < M){
if(HashTable[coin[i]] >= 2 && M == 2 * coin[i]){
printf("%d %d",coin[i],M-coin[i]);
break;
}
if(HashTable[M - coin[i]] > 0 && M != 2 * coin[i]){
printf("%d %d",coin[i],M-coin[i]);
break;
}
}
}
if(i == N) printf("No Solution");
}
段错误原因:不能只开500,M-coin[i]有可能大于500!!!
解决方法:改为1000以上