题面传送门

题目描述

有 \(n\) 个数 \(a_i\) 请你从中至少选出一个数,使它们的乘积最大

解决思路

  1. 对于正数,对答案一定有贡献(正数越乘越大),所以输入正数时直接输出即可。

  2. 对于负数,如果负数的个数 \(f\) 是偶数,负负得正,可以全部输出。如果负数的个数 \(f\) 为奇数,那么就输出绝对值较大的 \(f-1\) 个。

  3. 有一种特殊情况,那就是 \(n = 1\) ,且唯一的数是负数,那就直接输出这个负数。

  4. 对于 \(0\) 也要特殊讨论。如果全部是 \(0\) 或者除 \(0\) 外只有一个负数,那么只能输出 \(0\)。

代码十分简短。

感觉思路和其他大佬都很像

AC code

#include<bits/stdc++.h>
using namespace std;
int n,a,f,l,ans[105],t; //ans数组存储负数,f为负数个数,l为零的个数
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a);
if(a>0) printf("%d ",a); //如果是正数就直接输出
else a==0?l++:ans[++f]=a; //三目运算,如果是零l++,否则存到负数数组里
}
if(f==1&&n==1) printf("%d",ans[1]); //只有一个负数
else if(l==n||(f==1&&l==n-1)) printf("0"); //0的特殊情况
else{
sort(ans+1,ans+f+1); //对负数排序
if(f%2==0) for(int i=1;i<=f;i++) printf("%d ",ans[i]); //偶数个就全部输出
else for(int i=1;i<f;i++) printf("%d ",ans[i]); //奇数个就输出绝对值大的f-1个
}
return 0;
}

望过

最新文章

  1. [转载:]Fortran 二进制文件读写
  2. 微软BI 之SSRS 系列 - 如何设置页标题重复
  3. WordPress添加固定位置的百度分享按钮
  4. DS实验题 Old_Driver UnionFindSet结构
  5. Linux系统文件的隐藏属性
  6. 【Tech】YCSB-0.1.3安装使用
  7. 转:Android官方MVP架构示例项目解析
  8. Classes and Objects :类和对象(2)
  9. oracle函数、包、变量的定义和使用、重点”结构体和数组”
  10. Class File Editor: Source not found
  11. 给Visual Studio更替皮肤和背景图
  12. js 触摸事件
  13. foreach 循环的应用传值
  14. (转载)一个生动的NIO描述
  15. CentOS7配置更新国内yum源
  16. springboot-项目获取resources下文件碰到的问题(classPath下找不到文件和文件名乱码)
  17. bug总结
  18. cf869C组合计数问题
  19. django静态文件路径配置
  20. 关于pom版本提交不成功的问题

热门文章

  1. 【C标准库】详解feof函数与EOF
  2. GNSS模块使用笔记
  3. kingbaseES R3 集群配置 SSL
  4. 从零打造“乞丐版” React(一)——从命令式编程到声明式编程
  5. Python数据分析教程(一):Numpy
  6. 聊聊asp.net core 授权流程
  7. nginx反向代理单独的java项目配置示例
  8. Linux服务器上MinIO生产部署的内核调优
  9. Kubernetes(k8s)为容器设置启动时要执行的命令和参数
  10. k8s中yaml文件常见参数含义