#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.从这题的位置和难度可以看出,蓝桥杯的题目是真的可以好好尝试一波,加油吧骚年