方法有很多,基础方式为穷举, 对每个五位数,都做一次判断。
优化方法, 可以根据各种数学原理进行优化。
1 最基础的穷举法。
遍历所有五位数, 如果满足个位数为6,且能被3整除,则累加。
代码:
#include
int main()
{
int i;//用来遍历
int cnt=0;//记录个数。
for(i = 10000; i<=99999; i++) //遍历所有五位数。
{
if(i%3==0 && i%10==6)//符合条件
cnt++;//累加
}
printf("%d\n", cnt);//输出结果。
return 0;
}
2 由于要求个位数为6,这样可以仅遍历个位是6的。
也就是从10006开始,每次自加10, 遍历次数减少90%,同时,需要判断的条件减少为一个。
代码
#include
int main()
{
int i;//用来遍历
int cnt=0;//记录个数。
for(i = 10006; i<=99999; i+=10) //遍历所有个位为6的五位数。
{
if(i%3==0)//只需判断3的倍数即可。
cnt++;//累加
}
printf("%d\n", cnt);//输出结果。
return 0;
}
3 再优化一下。 直接遍历3的倍数,且个位为6的数。
从数学原理,可以得知, 这样的数,每30个中出现一个。
第一个符合要求的为10026
于是代码可以优化为
#include
int main()
{
int i;//用来遍历
int cnt=0;//记录个数。
for(i = 10026; i<=99999; i+=30) //直接遍历符合要求的五位数。
{
cnt++;//无需判断,直接累加
}
printf("%d\n", cnt);//输出结果。
return 0;
}
4 最后,根据数学原理,直接计算个数并输出。
第一个符合要求的是10026, 最后一个是99996,每30个数出现一个,总数就是
(99996-10026)/30+1
于是直接输出
#include
int main()
{
printf("%d\n", (99996-10026)/30+1);//输出结果。
return 0;
}
这种方法, 代码量最小,但这样会把一个C语言题目,转为数学题目,在实际C语言练习中,不推荐使用。
# include
void main()
{
int a,b,c,d;//分别表示万位千位 百位和十位
int sum=0;//计数
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
{
if((a*10000+b*1000+c*100+d*10+6)%3==0)
sum++;//计数
}
printf("共有%d个",sum);
}
我觉得你应该看得懂的,不难。
六位数应该是从100002到299997,299997-100002=199995 199995除以3