卡片排列card

这篇文章介绍了一个编程问题,要求使用给定的只包含0和5的卡片组成一个最大的能被90整除的非负整数。如果无法组成,输出-1。给出的C++代码展示了解决方案。
摘要由CSDN通过智能技术生成

题目描述

HXY得到了一些卡片,这些卡片上标有数字 0 或 5。现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被 90 整除这个条件。同时,这个数必须为合法的某个非负整数,即不能含有前导 0 ,即 0不能作为这串数的首位。但是特殊地,整数 0满足条件。如果不能排出这样的数,输出“−1”。

输入格式

第一行,卡片的个数 n 。

第二行,分别给出了这 n 个数(只能为数字 5 或 0 )。

输出格式

仅一行,如果可以排出,则输出这个数。否则输出-1

下面就是你们喜欢的代码啦!

#include<bits/stdc++.h>
using namespace std;
int n,a[2100],s=0,e=0;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==5)
        s++;
    }
    e=n-s;
    if(9>s)
    {
        if(e>0)
        {
            cout<<"0";
            return 0;
        }
    }
    if(9>s&&e==0)
    {
        cout<<"-1\n";
        return 0;
    }
    for(int i=1;i<=s;i++)
    {
        if(i*9>s)
        {
            for(int j=1;j<=(i-1)*9;j++)
            {
                cout<<"5";
            }
            for(int j=1;j<=e;j++)
            {
                cout<<"0";
            }            
            break;
        }
    }
    return 0;
}

希望大家喜欢我的代码哦!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值