问题:
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;
}