题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1433
题意:给定n个数,这n个数要么是0要么是5,要求组成一个这样的数:它是90的倍数,并且尽可能大。
思路:首先组成9的倍数,也就是有9的倍数个5(因为一个数各个位之和为9的倍数,那么这个数是9的倍数,貌似只有9有这个性质),然后再后面加个0就是90的倍数。
#include<cstdio>
#include<queue>
#include<iostream>
#include<vector>
#include<map>
#include<cstring>
#include<string>
#include<set>
#include<stack>
#include<algorithm>
#define cle(a) memset(a,0,sizeof(a))
#define inf(a) memset(a,ox3f,sizeof(a))
#define ll long long
#define Rep(i,a,n) for(int i=a;i<=n;i++)
using namespace std;
const int INF = ( 2e9 ) + 2;
//const int maxn =
int main()
{
int n;
int f=0;
int five=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int t;
scanf("%d",&t);
if(t==0)f++;
if(t==5)five++;
}
if(five>=9&&f)// 至少要有一个0
{
int t=five/9*9;
for(int i=0;i<t;i++)
printf("5");
for(int i=0;i<f;i++)
printf("0");
puts("\n");
}
else if(f)
printf("0\n");
else printf("-1\n");
}

本文介绍了一道编程题的解决方法,题目要求利用给定的0和5构造一个最大的90倍数。通过分析可知,只要0的数量大于等于1且5的数量能被9整除,就能构成90的倍数。

301

被折叠的 条评论
为什么被折叠?



