Description

给定一个整数n,和一个包含n个一位数字的数组,可以任意选取部分数字(或者全选),问可以构成的最大的3的倍数是多少呢?

注意:最后的结果可能很大,建议采用字符串的形式进行储存,如果结果不存在请输出No Exist

Input
1<=n<=100

输入数组中的每个元素均属于[0,9]

Output
输出最大的3的倍数

注意输出的字符串不含前导零

Sample Input 1

3
1 5 6
Sample Output 1

651
Sample Input 2

1
1
Sample Output 2

No Exist
思路:我们首先按照由大到小的顺序排序,然后看一下所有的数的和对3取余是多少?然后从末尾遍历,删除相应的数字。如果最后可以有这样一个字符串,就说明可以构成;否则就不能构成。
提交网址
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e2+10;
int a[maxx],b[maxx];
int sum[maxx];
string s[100001];
int n;inline int cmp(int a,int b){return a>b;}
inline int cmp1(string a,string b)
{if(a.length()!=b.length()) return a.length()>b.length();else return a>b;
}
inline int cmp2(char a,char b){return a>b;}int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);string ss="";sort(a+1,a+1+n,cmp);sum[0]=0;for(int i=1;i<=n;i++) sum[i]=(sum[i-1]+a[i]%3)%3;for(int i=1;i<=n;i++) ss+=(char)(a[i]+'0');if(sum[n]==0){if(a[1]==0) cout<<0<<endl;else cout<<ss<<endl;}else if(sum[n]==1){int flag=0;for(int i=n-1;i>=0;i--){if((ss[i]-'0')%3==1){ss.erase(ss.begin()+i);flag=1;break;}}if(!flag){int num=0;for(int i=n-1;i>=0;i--){if((ss[i]-'0')%3==2){ss.erase(ss.begin()+i);num++;if(num==2) {flag=1;break;}}}}if(flag==0||ss.length()==0) cout<<"No Exist"<<endl;else {if(ss[0]=='0') cout<<0<<endl;else cout<<ss<<endl;}}else if(sum[n]==2){int flag=0;for(int i=n-1;i>=0;i--){if((ss[i]-'0')%3==2){ss.erase(ss.begin()+i);flag=1;break;}}if(!flag){int num=0;for(int i=n-1;i>=0;i--){if((ss[i]-'0')%3==1){ss.erase(ss.begin()+i);num++;if(num==2) {flag=1;break;}}}}if(flag==0||ss.length()==0) cout<<"No Exist"<<endl;else {if(ss[0]=='0') cout<<0<<endl;else cout<<ss<<endl;}}return 0;
}

努力加油a啊,(o)/~

n个一位数字的数组中选取任意数目的数字,构成的3的最大倍数是多少?相关推荐

  1. python找出只出现一次的数字_Python数组中只出现一次的数字

    任何一个数字异或他自己都等于0,0异或任何一个数都等于那个数.数组中出了两个数字之外,其他数字都出现两次,那么我们从头到尾依次异或数组中的每个数,那么出现两次的数字都在整个过程中被抵消掉,那两个不同的 ...

  2. 数据结构与算法--数组中出一次的数字

    数组中出现一次的数字 题目:一个整型数组里面除了一个数字以外,其他数字都出现了两次.找出这个出现一次的数字,时间复杂度O(n),空间复杂度O(1) 如上题中最简单的方法就是一次循环统计,之后在循环判断 ...

  3. 剑指offer:面试题39. 数组中出现次数超过一半的数字

    题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, ...

  4. 【剑指offer-Java版】29数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 两种思路: 思路一:由于出现次数超过一半,所以如果对这个数组进行划分之后无论如何,位于数组下标 n/2的数字就是出现次数超过一半的数 所以问题就转换为了求划分一次之后 位 ...

  5. 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]

    题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. 分析:这是一道广为流传的面试题,包括百度.微软和Google在内的多家公司都曾经采用过这个题目.要几十分钟的时间里很好地解答这道题 ...

  6. 算法--微软面试:指定数字在数组中出现的次数

    Q题目 在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次. Answer解法 这道题要求出结果不难,但要求最有解的话,就需要花费一番功夫了.常见解法有如 ...

  7. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  8. 【四种解法】剑指 Offer 39. 数组中出现次数超过一半的数字

    立志用最少的代码做最高效的表达 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, ...

  9. Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引

    问题内容是:给定一个数组,给定一个数字.返回数组中可以相加得到指定数字的两个索引. 比如:给定nums = [2, 7, 11, 15], target = 9 那么要返回 [0, 1],因为2 + ...

最新文章

  1. Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)
  2. sqlserver 新建只读权限用户
  3. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc
  4. MyBatis配置错误
  5. 四川大学金融转计算机,[请教]川大和西财哪个金融系好?!
  6. docker 报错 Container is not running
  7. Windows的命令行窗口运行Python时,如何清屏?
  8. 为22-29岁的人解释一下什么叫工作(转)
  9. 看图说话:11种用户,你如何应对?
  10. android电视与苹果手机图片,小米电视怎么投屏?图文讲解安卓和苹果手机投屏到小米电视方法...
  11. OkHttp Events事件
  12. C语言——求n天后的日期
  13. 茧数SCRM营销自动化的定位
  14. 栈内存 堆内存 (数据类型间的存储区别)
  15. GreaseMonkey
  16. 【java校招你不知道的那些事儿】java校招不仅仅是春招秋招,具体有哪些阶段,特点是什么
  17. Perf8:Python 的性能指标
  18. 关于apache上的CGI文件问题总结--为什么无法找到cgi文件、为什么找到了cgi文件却不执行反而询问是否下载或直接显示文件代码
  19. 华为S5720交换机通过ACL限制VLAN之间的访问
  20. 微软EPG老大让秘书发给大家的邮件

热门文章

  1. 外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式
  2. sql数据类型转换oracle,ORACLE SQL数据类型转换
  3. python 视图对象_python web框架篇:views视图函数
  4. 西门子cpu指示灯含义_西门子S7200仿真软件如何使用?
  5. IOS 远程测试方案
  6. AFNetworking 学习笔记
  7. 【CentOS 7笔记4】,两种修改密码方式#
  8. opensuse x64下编译Ice源码(以编译c++为例)
  9. input 打开文件夹事件委托
  10. 英国电信公司沃达丰遭到网络攻击