原题链接:I think it's hard
解题思路:
是自己挑一部分数字求第二最大。所以如果全是负数那么最大就是什么都不挑。第二大就是0+最大的负数
注意事项:
没什么特别需要注意的
想用c提交就把 &和const去掉
参考代码:
#include<stdio.h>
#define INF 0x80000000
#define SUP 0x7FFFFFFF
inline int read()//速读
{ int x=0,f=1;char ch=getchar();
while(ch<48||ch>57){if(ch=='-')f=-f;ch=getchar();}
while(ch>=48&&ch<=57)x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
inline int abs(const int &a){return a>=0?a:-a;}//绝对值
main()//所有正数相加(-最小的正数或+最大的负数)
{ int T=read();
while(T--)
{ int n=read(),sum=0,min=SUP,max=INF;
while(n--)
{ int a=read();
if(a>0)sum+=a,min=min<a?min:a;//正数才加
else if(a<0)max=max>a?max:a;
}
if(min==SUP&&max==INF)min=0;//都没取说明全是0
else if(max!=INF&&min==SUP)min=-max;//最大的负数有,没有最小的正数,取用最大的负数
else if(max!=INF&&min!=SUP)min=abs(max)<min?abs(max):min;//都取了,比一个绝对值最小的
printf("%d\n",sum-min);
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复