刷题记录-2019年第10届蓝桥杯竞赛-数的分解

在这里插入图片描述

 

思路:暴力

很容易想到直接三重循环遍历1到2019然后把其中包含2和4的数去除,判断相加是不是为2019,但是太慢了。可以优化一下。

设第一个数为       第二个数为 j        第三个数为 k

i 照样从1到2019进行遍历 

j 则可以从 i+1 开始遍历 因为可以避免题目要求的顺序

k 则可以为 2019-i-j 就不需要再遍历到2019节约时间

但同时需要加上一个条件 k>j 因为要保证i<j<k才能不重复

所以代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{int count=0;
	for(int i=1;i<=2019;i++){
		for(int j=i+1;j<=2019;j++){
	 		int k=2019-i-j;
	 			if(i+j+k==2019 
				 && i%10!=2 
				 && i/10%10!=2 
				 && i/100%10!=2 
				 && i/1000%10!=2
				   && i%10!=4 
				   && i/10%10!=4 
				   && i/100%10!=4 
				   && i/1000%10!=4
				  	 && j%10!=2 
					 && j/10%10!=2 
					 && j/100%10!=2 
					 && j/1000%10!=2 
					   && j%10!=4 
					   && j/10%10!=4 
					   && j/100%10!=4 
					   && j/1000%10!=4
					   	  && k%10!=2 
					      && k/10%10!=2 
					      && k/100%10!=2
					      && k/1000%10!=2
						    && k%10!=4 
						    && k/10%10!=4 
						    && k/100%10!=4 
						    && k/1000%10!=4
						       && j<k)
	 				count++;	
	 	} 
	 	
	}
	cout<<count;

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值