问题标题: 酷町堂1588 卡片排序游戏 Wrong Answer:0分请大佬帮帮忙

0
0
已解决
栾峻岩
栾峻岩
初级天翼
初级天翼
#include <iostream>
using namespace std;
int a[1001];
int main()
{
    int n,sum=0;
    bool flag=false,flag2=false;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
        if (a[i]==0)
            flag=true;
        sum++;
    }
    if (sum%9==0)
        flag2=true;
    if (flag && flag2)
    {
        for (int i=1;i<=n;i++)
        {
            if (a[i]==5)
                cout<<a[i];
        }
        for (int i=1;i<=n;i++)
            if (a[i]==0)
                cout<<a[i];
    }
    else
        cout<<"-1";
    return 0;
}

请大佬帮帮忙吧!走过路过千万不要错过啊!

栾峻岩在2018-01-23 18:36:25追加了内容
#include <iostream>
using namespace std;
int a[1001];
int main()
{
    int n,five=0,zero=0;
    bool flag=false,flag2=false;
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        cin>>a[i];
        if (a[i]==0)
            zero++;
        if (a[i]==5)
            five++;
    } 
    if(five < 9 && zero != 0)
    {
        cout<<"0";
        return 0;
    }
    if((five < 9 && zero == 0) || zero == 0)
    {
        cout<<"-1";
        return 0;
    }
    if(five % 9 == 0)
    {
        for(int i=1; i<=five;i++)
        {
            cout<<"5";
        }
        for(int i=1;i<=zero;i++)
        {
            cout<<"0";
        }
        return 0;
    }
    else
    {
        for(int temp=five;temp% 9!=0;temp--)
        {
            for(int i=1;i<=temp;i++)
            {
                cout<<"5";
            }
            for(int i=1;i<=zero;i++)
            {
                cout<<"0"; 
            }
        }
        return 0;
    }
    return 0;
}

  还是20分,


-1
已采纳
梁锦程
梁锦程
高级光能
高级光能

比较坑人的一道题

分析

在看题时,要注意以下几点:

  1. 卡片上只有0或者5两个数

  2. HXY可以选择一些卡片

  3. 数字最大且能被90整除

   4. 根据样例1,0可以单独输出(这一点很坑人,因为题目中明确说了0不能作为这串数的首位)

重点分析第三点,综合第一点,我们发现:组成的数字各个位数的和能被9整除,并且最后一位必须是0(否则不能被90整除)。

我们用five表示5的个数,zero表示0的个数,我们发现:组成的数字各个位数的和为5×five,为了保证其能被9整除,必须要保证数字中5的个数为9的倍数。

因此可以做一下讨论:

  1. zero == 0 时,必须输出-1。因为这样的数一定不能被10整出,进而不能被90整除

  2. zero != 0 and five < 9 时,必须输出0。

  3. zero != 0 and five >= 9 时,输出的5的个数为a,a为最大的满足 a <= five,且a为9的整数倍。

最后,为了保证数字最大,很容易得到要让5尽量排在前面。又由于0必须出现在最后一位,没有出现冲突,所以我们很高兴,只需要让所有的5排在所有的0前面即可。

懂了吗?望采纳!谢谢!

梁锦程在2018-01-23 12:36:55追加了内容
//以下判断的分类逻辑不是很清晰,建议先看“分析”部分
    if(five < 9 && zero != 0)
    {
        printf("0");
        return 0;
    }
    if((five < 9 && zero == 0) || zero == 0)
    {
        printf("-1");
    }
    if(five % 9 == 0)
    {
        for(i = 1; i <= five; i++)
        {
            printf("5");
        }
        for(i = 1; i <= zero; i++)
        {
            printf("0");
        }
        return 0;
    }
    else
    {
        //这步实现“分析”中的“输出的5的个数为a,a为最大的满足 a <= five,且a为9的整数倍的数”
        for(temp = five; temp % 9 != 0; temp--);
        for(i = 1; i <= temp; i++)
        {
            printf("5");
        }
        for(i = 1; i <= zero; i++)
        {
            printf("0"); 
        }
        return 0;
    }

 

1
1
沈子涵
沈子涵
修练者
修练者

题目要求:她可以选择其中一些卡片组成一个数,即不必全选

0
屠景瑞
屠景瑞
新手光能
新手光能

要读题!题目要求:她可以选择其中一些卡片组成一个数,即不必全选

0
0
樊澄宇
樊澄宇
新手光能
新手光能

题目要求:她可以选择其中一些卡片组成一个数,即不必全选

0
0
我要回答