关于数字中各位不能出现特定数字的求解方法

在这里插入图片描述

#include<stdio.h>
int check(int,int,int);
int main()
{
	int counter=0;
	for(int i=1;i<2019;i++)
	{
		for(int j=1;j<2019;j++)
		{
			if(i==j)	continue;
			for(int k=1;k<2019;k++)
			{
				if(j==k||i==k)	continue;
				if(i+j+k==2019)
				{
					if(check(i,j,k))
						counter++;
				}
			}
		}
	}
	printf("%d",counter/6);
	return 0;
 } 
 
 
 
 
 
 
 
 
 
 
 
 
 int check(int x,int y,int z)
 {
 	int temp=0;
	 while(x)
 	{
 		temp=x%10;
 		x=x/10;
 		if(temp==2||temp==4)	return false;
	 }
	 while(y)
 	{
 		temp=y%10;
 		y=y/10;
 		if(temp==2||temp==4)	return false;
	 }
	 while(z)
 	{
 		temp=z%10;
		z=z/10;
 		if(temp==2||temp==4)	return false;
	 }
	 return true;
 }

       这题是2018年蓝桥杯省赛的一题,因为是填空题,所以不需要考虑超时的问题。这题有几个要考虑的细节:1。如何解决三个数字互换位置为一种的问题:这个只需要将结果除以6即可。2,可以采取枚举法的策略将每一种可能筛选出来。3.如何排除掉那些包含2和4数字的数,这就是这一题最难的部分。
       之前也没有思路,但是这一题处理得很好,在以往处理一个数的各位分离时,我们都会用到取余。这题也是如此temp=x%10; x=x/10;对10取余是为了得到目前这个数的各位,而除以10是为了为了取得下一位做准备,知道while循环不成立时,所有的位数都判断完成,可以将计数指针加1.从这题的位置和难度可以看出,蓝桥杯的题目是真的可以好好尝试一波,加油吧骚年

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值