生活随笔
收集整理的這篇文章主要介紹了
n个一位数字的数组中选取任意数目的数字,构成的3的最大倍数是多少?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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的最大倍数是多少?的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。