菜鸟学C之第7题:个位数是6,且能被3整除的五位数共有多少个。
/*
/*7.个位数是6,且能被3整除的五位数共有多少个。
*/
#include<stdio.h>
#include<stdlib.h>
//+1
void main1() {
int length = 0;;
for (int i = 10000; i < 99999; i++) {
if (i % 10 == 6 && i % 3 == 0) {
length++;
}
}
printf("%d", length);
getchar();
}
//+3
void main2() {
int length = 0;;
for (int i = 9999; i < 99999; i+=3) {
if (i % 10 == 6) {
length++;
}
}
printf("%d", length);
getchar();
}
//+10
void main3() {
int length = 0;;
for (int i = 10006; i <= 99996; i += 10) {
if (i % 3 == 0) {
length++;
}
}
printf("%d", length);
getchar();
} 看的懂,但我未必会写的出来。 穷举效率太低了 冰露㊣神 发表于 2017-11-17 20:16
穷举效率太低了
求指教,,,,,,{:300_965:} 本帖最后由 tmpsforjxp 于 2017-11-17 20:23 编辑
int length=0;
for(int i=1002;i<=9999;i++){
if(i%3=0){
length++;
}
} 首先6能整除以3 只要前四位能整除3即可1000 ~9999 接下来只要计算这里面有几个能被3整除 (9999-1000)/3 +1 = 3000一步到位 这告诉我们一个道理 算法才是王道 我根据两位朋友的思路,想了一下。我的想法如下:首先证明 能被3整除的数其各位的和一定能被3整除。各位的和能被3整除此数一定能被3整除。
假设有一个四位数abcd,它可以表示成以下形式:
abcd=1000a+100b+10c+d
=999a+99b+9c+a+b+c+d
=9×(111a+11b+c)+a+b+c+d
可以看出,9×(111a+11b+c)必定能被3整除,所以判断abcd能否被3整除,就看a+b+c+d能被3整除,也就是看它各数位上的数字之和能否被3整除.
证明:如果a+b+c+d可以被三整除,abcd可以被三整除.
∵ ——
abcd=1000a+100b+10c+d
=999a+99b+9c+a+b+c+d
而且 3|999,
3|99
3|9
∴3|999a
3|99b
3|9c
—即证。
在此题中,此5位数能被3整除,而末尾的6能被3整除,说明了前4位的和能被3整除。说明了前4位能被3整除。即证。 照顾我的猫咪 发表于 2017-11-17 20:35
首先6能整除以3 只要前四位能整除3即可1000 ~9999 接下来只要计算这里面有几个能被3整除 (9999-1000)/3 ...
兄弟,谢谢你们,算法为王。这才是我发帖的目的,学习学习 tmpsforjxp 发表于 2017-11-17 20:21
int length=0;
for(int i=1002;i
兄弟,谢谢你们,算法为王。这才是我发帖的目的,学习学习 不知道咋啊啊
页:
[1]