岚朋友


私信TA

用户名:a475308928

访问量:1398

签 名:

等  级
排  名 73
经  验 9652
参赛次数 0
文章发表 11
年  龄 0
在职情况 学生
学  校 ???
专  业 软件工程

  自我简介:

TA的其他文章

位运算 26行
浏览:46

解题思路:
是自己挑一部分数字求第二最大。所以如果全是负数那么最大就是什么都不挑。第二大就是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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区