列表

详情


NC25997. 0和5

描述


小C手中有n张牌,每张牌上有一个一位数的数,这个数字不是0就是5。

小C从这些牌在抽出任意张(不能抽0张),排成一行就组成了一个数。

使得这个数尽可能大,而且可以被90整除。


注意:

1.这个数没有前导0,

2.小C不需要使用所有的牌。



输入描述

每个测试数据输入共2行。

第一行给出一个n,表示n张牌。(1<=n<=1000)

第二行给出n个整数a[0],a[1],a[2],…,a[n-1] (a[i]是0或5 ) 表示牌上的数字。

输出描述

共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)

示例1

输入:

4
5 0 5 0

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 3ms, 内存消耗: 312K, 提交时间: 2022-12-16 15:14:46

#include<stdio.h>
int main()
{
	int n,num1=0,num2=0,i,a[1000],m;
	scanf("%d\n",&n);
	for(i=0;i<n;i++)
	{
	scanf("%d",&a[i]);
	if(a[i]==5)  num1++;
	if(a[i]==0)   num2++;
}
	if(num2==0)
	{
	printf("-1");
}
	else if(num1>=9)
	{
	 m=num1/9;
	 for(i=0;i<9*m;i++)
	 printf("5");
	 for(i=0;i<num2;i++)
	printf("0");
}
	else
	printf("0");
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 496K, 提交时间: 2019-05-26 17:37:04

#include <bits/stdc++.h>
using namespace std;
int n,a,b,i,c;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>c;
        if(c) a++;
        else b++;
    }
    if(!b)puts("-1");
    else if(a>=9)
    {
        for(i=0;i<a/9*9;++i) cout<<"5";
        for(i=0;i<b;++i) cout<<"0";
    }
    else puts("0");
}

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 392K, 提交时间: 2020-02-26 11:35:55

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x,y,n;
	x=y=0;
	cin>>n;
	while(n--)
	{
		int a;
		cin>>a;
		if(a) x++;
		else y++;
	}
	int z=x/9*9;
	if(z&&y)
	{
		for(int i=1;i<=z;i++)
		cout<<5;
		for(int i=1;i<=y;i++)
		cout<<0;
	}
	else
	{
		if(y) cout<<0;
		else cout<<-1;
	}
}

上一题