有限五位数,个位数为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;
}
枚举所有的五位数,其中个位数为 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;
}
1.编译运行服务器端
$ gcc server.c -o server -lsqlite3
$ ./server -p 端口号
2.编译运行客户端
$ gcc client.c -o client -lsqlite3
$ ./client -p 端口号 -i IP地址