枚举算法1——判断n能否被3、5、7整除

枚举算法,也称为穷举算法它是编程中常用的一种算法。在解决某些问题时,可能无法按照一定规律从众多的候选答案中找到正确答案。此时,可以从众多的候选解中逐一取出候选答案,并验证候选答案是否为正确的解。我们将这种方法称为枚举法。


枚举法的缺点:运算量比较大,解题效率不高。如果枚举范围太大,在时间上就难难以承受。优点:思路简单,编程编写和调试方便。

判断n能否被3、5、7整除

输入一个正整数n,判断n是否能被3、5、7整除,并输出以下信息:
(1)能同时被3、5、7整除。
(2)能被其中两个数(要指出是哪两个)整除。
(3)能被其中一个数(指出是哪一个)整除。
(4)不能被3、5、7任何一个整除。

【分析】

本题可以用简单的if-else选择语句嵌套结构判断n是否能被3、5、7整除。

代码如下:

if(n%3==0 && n%5==0 && n%7==0)
    printf("该整数能被3、5、7整除");
else if(n%3==0 && n%5==0 && n%7!=0)
    printf("该整数能被3、5整除");
else if(n%3==0 && n%5!=0 && n%7==0)
    printf("该整数能被3、7整除");
else if(n%3!=0 && n%5==0 && n%7==0)
    printf("该整数能被5、7整除");
else if(n%3==0 && n%5!=0 && n%7!=0)
    printf("该整数只能被3整除");
else if(n%3!=0 && n%5==0 && n%7!=0)
    printf("该整数只能被5整除");
else if(n%3!=0 && n%5!=0 && n%7==0)
    printf("该整数只能被7整除");

else
    printf("该整数不能被3、5、7任何一个整除");

上述方法使用了很多条件语句,结构不是很清晰。除了上述方法,还可以结合二进制的性质利用枚举法求解,具体方法如下:

如果将n能被整除用1表示,不能被整除用0表示。用3位二进制数表示n是否则被3、5、7整除。例如1即(001)表示能被7整除,4即(100)表示能被3整除,6即(110)表示能被3和5同时整除,如图所示。

从图中可以看出,共有八种情况。未来网表示二进制数,需要定义3个变量c1、c2、c3,分别表示是否能被3、5、7整除。

code:

 

#include<stdio.h>
#include<iostream>
void main()
{  
	int n,c1,c2,c3;
	printf("请输入一个整数:");
	scanf("%d",&n);
	c1 = n%3 ==0;
	c2 = n%5 ==0;
	c3 = n%7 ==0;
	switch((c1<<2)+(c2<<1)+c3)
	{
	case 0:
		printf("不能被3,5,7整除.\n"); 
		break;
	case 1: 
		printf("只能被7整除.\n"); 
		break;
	case 2:
		printf("只能被5整除.\n");
		break;
	case 3:
		printf("可以被5,7整除.\n");
		break;
	case 4: 
		printf("只能被3整除.\n");
		break;
	case 5:
		printf("可以被3,7整除.\n");
		break;
	case 6: 
		printf("可以被3,5整除.\n");
		break;
	case 7: 
		printf("可以被3,5,7整除.\n");
		break;
	}
    system("pause");
} 

结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值