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

来源:互联网 发布:淘宝客内部卷网站源码 编辑:程序博客网 时间:2024/06/04 17:53

问题:

 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;}



原创粉丝点击