关于#c语言#的问题:个位数为6且能被3整除的五位数有多少个

有限五位数,个位数为6且能被3整除的五位数有多少个?
我的代码为什么会输出19683?

#include <iostream>

int main() {
    int sum=0;
    for (int a=1;a<=9;a++)
    {
        for (int b=1;b<=9;b++)
        {
            for (int c=1;c<=9;c++)
            {
                for (int d=1;d<=9;d++)
                {
                    for (int e=1;e<=9;e++)
                    {
                        if ((a*10000+b*10000+c*1000+d*100+e*10+6)%3==0)
                        {
                            sum++;
                        }else{
                            continue;
                        }
                    }
                }
            }
        }
    }
    printf("%d",sum);
    return 0;
}

万位算了两次,去掉多算的这个万位。

修改如下:

参考链接:

#include <iostream>
 
int main() {
    int sum=0;
    for (int a=1;a<=9;a++)
    {
        for (int b=0;b<=9;b++)
        {
            for (int c=0;c<=9;c++)
            {
                for (int d=0;d<=9;d++)
                {
                    
                    if ((a*10000+b*1000+c*100+d*10+6)%3==0)
                    {
                        sum++;
                    }else{
                        continue;
                    }
                    
                }
            }
        }
    }
// https://zhidao.baidu.com/question/366224985349947852.html
    printf("%d",sum);
    return 0;
}

img

枚举所有的五位数,其中个位数为 6,如果该五位数能被 3 整除,则 sum 计数器增加 1。
由于枚举的是所有五位数,所以会产生较大的结果。
更优的方法是通过数学定理来求解:
个位数为 6 的五位数 = (9 * 9 * 10 - 9 * 9) = 810 个数
能被 3 整除的五位数 = (810 / 3) = 270 个数
所以个位数为 6 且能被 3 整除的五位数应该是 270 个。

优化代码:

#include <iostream>

int main() {
    int sum = (9 * 9 * 10 - 9 * 9) / 3;
    printf("%d", sum);
    return 0;
}

输出结果为:
270

代码输出结果为19683是因为在循环中多算了一次万位,并且没有考虑其余位数可以是0的情况


#include <iostream>
 
int main() {
    int sum=0;
    for (int a=1;a<=9;a++)  //万位不能为0,其余可以,个位为6
    {
        for (int b=0;b<=9;b++)
        {
            for (int c=0;c<=9;c++)
            {
                for (int d=0;d<=9;d++)
                {
                    
                    if ((a*10000+b*1000+c*100+d*10+6)%3==0)
                    {
                        sum++;
                    }else{
                        continue;
                    }
                    
                }
            }
        }
    }
    printf("%d",sum);
    return 0;
}