0和5(51Nod-1433)
生活随笔
收集整理的這篇文章主要介紹了
0和5(51Nod-1433)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
小K手中有n張牌,每張牌上有一個一位數的數,這個字數不是0就是5。小K從這些牌在抽出任意張(不能抽0張),排成一行這樣就組成了一個數。使得這個數盡可能大,而且可以被90整除。
注意:
1.這個數沒有前導0,
2.小K不需要使用所有的牌。
輸入
每個測試數據輸入共2行。
第一行給出一個n,表示n張牌。(1<=n<=1000)
第二行給出n個整數a[0],a[1],a[2],…,a[n-1] (a[i]是0或5 ) 表示牌上的數字。
輸出
共一行,表示由所給牌組成的可以被90整除的最大的數,如果沒有答案則輸出”-1”(沒有引號)
輸入樣例
4
5 0 5 0
輸出樣例
0
思路:
由于只給出 0 和 5,要求組成的數能被 90 整除,那么假設 n 張牌中 5 有 a 張,0 有 b 張,可以發現,只有當 a/9>=0?時,組成的牌才能被整除
故先統計牌中 0 和 5 的個數,然后判斷 a、b 個數之間的關系進行輸出即可
源程序
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 10000+5; const int dx[] = {-1,1,0,0}; const int dy[] = {0,0,-1,1}; using namespace std;int a[N]; int main() {LL n;scanf("%lld",&n);int numFive=0,numZero=0;for(int i=1; i<=n; i++) {scanf("%d",&a[i]);if(a[i]==5) numFive++;else numZero++;}if(numFive/9>0&&numZero>0) {for(int i=1; i<=numFive/9; i++) cout<<"555555555";for(int i=1; i<=numZero; i++)cout<<"0";} else if(numZero>0)cout<<"0";elsecout<<"-1";return 0; }?
總結
以上是生活随笔為你收集整理的0和5(51Nod-1433)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理论基础 —— 栈 —— 链栈
- 下一篇: 高橋君とカード / Tak and Ca