(第二题) 逻辑,条理思维!!!

问题:

 n个数  每个随机是 5  或是  0   判断这n个数所组成的能被90整除的最大的数是多少,如果没有  输出-1,

(注意不一定每个数都要用到!!)

分析:
           //  是90 的倍数  那么个位一定是0   所以不考虑个位的0  那么这个最大的数只需要是9 的倍数即可
           //  一定要知道 ,如果一个数的所有位的数相加的 和 是9的倍数,那么这个数就是9的倍数, 所以统计 5  出现的 个数 y, 判断 5*y 是否 9的倍数 ,
           //  若要成立,那么y 一定是9 的倍数!(9 18 27····)
           //  并且至少要有一个0 。!!
           //  要求是最大的,那么这个数  一定是  555...000...., 不可能5 和0 交叉出现!!!!!

代码:

#include <stdio.h>     
int main()
{
    int n;
    scanf("%d",&n);
    int i, a, x = 0, y = 0;
    for(i = 0; i < n; i++)
    {
        scanf("%d",&a);
        if(a == 0)
            x++;    // 0 的个数
        if(a == 5)
            y++;    //  5 的个数
    }
    if(x >= 1 && y>= 9)     //  所求存在的基本条件: 至少一个0,5的个数<=9,
    {
        for(i = 1; i <= (y/9)*9; i++)   // (y/9)*9(设为Y)  并不是废话  反而非常巧妙  !!!! 得出  <=y的最大9的倍数  比如 y=10,11,12 ,Y=9. y=18,19,20,21 Y=18 
        {
            printf("5");                 //  这样就非常巧妙的输出了符合要求的这个数(存在的情况下)的前半部分
        }
        for(i = 1; i <= x; i++)        
        {
            printf("0");      //在后面输出所有的 0 
        }
        printf("\n");
    }
    else      //  如果不满足基本条件
    {
        if(x != 0)   //  并且存在 0 
        {
            printf("0\n");   //  注意  0 也能整除90 啊啊啊!!!!!
        }
        else
        {
            printf("-1\n");  //  连0 都没有  就输出 -1 吧!
        }
    }
    return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值