0和5 51Nod - 1433 (为什么整除找出一个最大的整数能整除3或者9,为什么)

0人阅读 评论(0) 收藏 举报
分类:

小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。

注意:

1.这个数没有前导0,

2.小K不需要使用所有的牌。


Input每个测试数据输入共2行。 
第一行给出一个n,表示n张牌。(1<=n<=1000) 
第二行给出n个整数a00,a11,a22,…,an1n−1 (aii是0或5 ) 表示牌上的数字。Output共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)Sample Input
4
5 0 5 0
Sample Output
0

题意:中文不用说了

思路:运用数学知识,知道一个数为什么能被3或者9整除;

这道题不会的原因是:你不知道这个数学知识 
为什么每位数相加的数是3或9的倍数就可以被3或9整除?
假设这是两位数ab,把它写成10a+b,它的各位数字之和是a+b,两式相减,得9a,
因为9a能被3整除,所以如果a+b能被3整除,那么ab也能被3整除.

假设这是三位数abc,把它写成100a+10b+c,它的各位数字之和是a+b+c,
两式相减,得99a+9b,因为99a+9b能被3整除,所以如果a+b+c能被3整除,那么abc也能被3整除.
多位数以此类推就行,

9和3一个道理;

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	int i,j,k,t,n;
	int a[1100];

	while(~scanf("%d",&n))
	{
		t=-1;
		int f1=0;
		int sum=0;
		int sum1=0; 
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			sum+=a[i];
			if(a[i]==0)
				sum1++;
			if(sum%9==0)
				t=sum;	
		}
		if(t>0&&sum1>0)
		{
			k=t/5;
			for(i=0;i<k;i++)
				printf("5");
			for(i=0;i<sum1;i++)
					printf("0"); 
			printf("\n");	
		}
		else if(sum1>0) printf("0\n");
		else printf("-1\n");
	}
	return 0;
} 


查看评论

快速判断一个数能否被 2 ,3 ,4 ,5, 7,9,11 整除

性质1:如果数a、b都能被c整除,那么它们的和(a+b)或差(a-b)也能被c整除。 性质2:几个数相乘,如果其中有一个因数能被某一个数整除,那么它们的积也能被这个数整除。 能被2整除的数:个...
  • tkp2014
  • tkp2014
  • 2015-04-05 10:51:25
  • 1188

判断一个整数是否能被3或5整除

/* * Copyright (c) 2015, CSDN学院 * All rights reserved. * 文件名称:re.c * 作 者:刘树 * 完成日期:2015年 4 月 16 日...
  • hua_shuo_
  • hua_shuo_
  • 2015-04-16 22:16:58
  • 891

编写程序,输出在1~3000之间能被17整除的最大数值

--编写程序,输出在1~3000之间能被17整除的最大数值 DECLARE @max int,@i int select @i=3000,@max=0 while @i>=1 begin if @i...
  • u012110719
  • u012110719
  • 2014-12-14 20:31:43
  • 1508

判断一个整数能否同时被3和5整除

#include //判断一个整数能否同时被3和5整除 int main() { int n; scanf("%d",&n); //输入n if(n%3==0&&n%5==0) ...
  • qq_39565202
  • qq_39565202
  • 2017-07-20 09:25:42
  • 490

在控制台输出1~1000之中,所有能被5整除,或者被6整除的数字。

for(var i = 1; i if(i%7 == 0 || i%10 == 7){ console.log(i); } }
  • qq_21109153
  • qq_21109153
  • 2016-04-08 11:09:10
  • 903

大数整除

请编写程序,从键盘输入一个整数n,找出大于等于long.MAX_VALUE且能被n整除的前3个数字。 输入样例: 103 输出样例: 9223372036854775832 92233720368...
  • m0_37105443
  • m0_37105443
  • 2017-02-02 17:42:29
  • 406

能被2、3、4、5、6、7、8、9等数整除的数的特征

性质1:如果数a、b都能被c整除,那么它们的和(a+b)或差(a-b)也能被c整除。 性质2:几个数相乘,如果其中有一个因数能被某一个数整除,那么它们的积也能被这个数整除。 能被2整除的数...
  • c_circle
  • c_circle
  • 2017-11-09 18:52:56
  • 621

能被3,5,7整除的数

问题描述 输入一个整数,判断它能否被3,5,7整除,并输出以下信息: 1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格); 2、能被其中两个数整除(输出两个数,小的在前,大的在...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2015-10-15 23:28:33
  • 2361

编写算法对输入的一个整数,判断它能否被3,5,7整除,并输出一下信息之一:

能同时被3,5,7整除; 能被其中两个数(要指出哪两个数)整除; 能被其中一个数(要指出哪一个数)整除; 不能被3,5,7任一个整除。#include using namespace std;...
  • u011954296
  • u011954296
  • 2016-04-07 19:06:31
  • 7806

证明一个数能被3整除,当且仅当它的各位数的和能被3整除!

一个数能被3整除,当且仅当它的各位数的和能被3整除。 一个简单的证明方法如下: 就拿一个四位数 abcd , 它可以表示为 1000*a+100*b+10*c+d = 999*a+99*b+9...
  • happy_cheng
  • happy_cheng
  • 2015-02-26 20:48:50
  • 550
    个人资料
    持之以恒
    等级:
    访问量: 5960
    积分: 972
    排名: 5万+