个位数是6,且能被3整除的五位数共有多少个?怎么用c语言写

2025-01-06 01:22:19
推荐回答(3个)
回答1:

方法有很多,基础方式为穷举, 对每个五位数,都做一次判断。

优化方法, 可以根据各种数学原理进行优化。

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语言练习中,不推荐使用。 

回答2:

# 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);
}
我觉得你应该看得懂的,不难。

回答3:

六位数应该是从100002到299997,299997-100002=199995 199995除以3