您的位置:首页 > 其它

51nod 0 和 5

2015-09-30 14:43 190 查看
题意:

给出一个由0和5构成的数组,让这些数自由组合,求出能够组成的能被90整除的最大的数,不存在则输出-1。例如 5 5 0 这个数列可以组成 550 505 55 50这几个数,而其中没有能被90整除的数,输出-1

分析:

这个题目怎么解决呢?首先想到组成的这个数必须是以0结尾的,否则无论如何都不可能被90整除,那么我可以把问题化简成被9整除的数(因为在除的时候上下同时除以10)那么被9整除的数有什么性质呢?QAQ。。。。。这是我们想到9=3*3;3的倍数的各位数之和相加是3的倍数。这是我们猜想9也有相同的性质,因为把九分解成3*3那么能整除的话上面的数必须是 x*3 这个形式的。x的各位数相加是3的倍数,再乘以3,那么就是被9整除的数。那假设我们现在的到了这个数,我们现在只知道这个数的各位数相加的和,此时我们发现0对这个数没有影响,所以我们检查是否存在所有5相加得的数是不是9的倍数即可。有的话我们把5从前面输出(为了保证这个数最大,所有的0必须在后面),这样就是想法了。

程序:

#include<cstdio>
#include<algorithm>
using namespace std;
int main(void){
int n,i,sum,cnt,a;
while(scanf("%d",&n)!=EOF){
sum=0;cnt=0;
for(i=0;i<n;i++){
scanf("%d",&a);
if(a==5) sum+=5;
else cnt++;
}
while(sum%9!=0)
sum-=5;
if(cnt==0){ printf("-1\n"); continue; }
if(sum==0){ printf("0\n"); continue; }
do{
printf("5");
sum-=5;
}while(sum);
for(i=0;i<cnt;i++){
printf("0");
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: