PAT甲级 A1048 测试点1 未通过解决方法

浪尽此生 提交于 2020-03-08 14:54:42

提交代码仅有测试点1未通过,建议测试以下用例:

input

5 15
1 16 15 12 20

ouput(right)

No Solution

若使用标记数组记录数字出现次数,且在循环中不对标记数组中大于总钱数的值进行处理,则有可能输出错误:

20 -5

修改后的代码(未优化):

#include<stdio.h>
#include<stdlib.h>

int cmp_int(const void *a,const void *b){
	return *(int *)a - *(int *)b;
}
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	int num[n];
	int have[100010] = {0};
	for(int i = 0;i < n;i++){
		scanf("%d",&num[i]);
		have[num[i]]++;
	}
	qsort(num,n,sizeof(num[0]),cmp_int);
	int i;
	for(i = 0;i < n;i++){
		if(num[i] == 0){
			break;
		}
		if(num[i] == m - num[i]){
			if(have[num[i]] >= 2){
				printf("%d %d",num[i],num[i]);
				break;
			}
		}else if(num[i] < m){
			if(have[m - num[i]] >= 1){
				printf("%d %d",num[i],m - num[i]);
				break;
			}
			
		}
	}
	if(i == n){
		printf("No Solution");
	}
	return 0;
}

运行即可~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!