33届全国数学决赛:求[1.1000]之间能被3整除。且至少有一位上的数是5的所有数之和

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 02:28:04
编程啊tc.30

int sum = 0;
for (int i = 1; i < 10; i++) {
if (i % 3 == 0 && i % 5 == 0) {
System.out.println(i);
sum = sum + i;
}
}
for (int i = 10; i < 100; i++) {
if (i % 3 == 0) {
if ((i / 10) == 5 || (i % 10) == 5)
System.out.println(i);
sum = sum + i;
}
}
for (int i = 100; i < 1000; i++) {
if (i % 3 == 0) {
if ((i / 100) == 5 || (i - (i/100)*100) /10 == 5 || (i % 10) == 5)
System.out.println(i);
sum = sum + i;
}
}
for(int i = 1000; i < 1001; i++){
if (i % 3 == 0) {
int han = (i - (i/1000)*1000) ; //百位
if ((i / 1000) == 5 || han /100 == 5 || (han - (han/100)*100) /10 == 5 || (i % 10) == 5)
System.out.println(i);
sum = sum + i;
}
}
System.out.println(sum);

3整除,且至少有一位上的数是5的所有数,那就是能被15整除就行了

那51呢?

#include <stdio.h>

int is_exits_5(int);

void main()
{
int num[1000] = {0};
int i = 1;
int j = 0;
while (i < 1001)
{
if ((i % 3) == 0)
{
if (is_exits_5(i)) {
num[j] = i;
j++;
}
}
i++;
}
i = 0;
while (num[i] != 0)
{
printf("%d\n",num[i++]);
}
}
int is_exits_5(int a)
{
int temp = 0;

temp = a / 1000;
if ((temp != 0) && ((temp % 5) == 0)) {
return 1;
}
a -= temp * 1000;

temp = a / 100;
if ((temp != 0) && ((temp % 5) == 0)) {
return 1;
}
a -= temp * 100;

temp = a / 10;
if ((temp != 0) && ((temp % 5) == 0)) {
return 1;
}
a -= temp * 10;

temp = a;
if ((temp != 0) && ((temp % 5) == 0)) {
return 1;
}
return 0;
}

int sum=a=b=c=i=0;
for(i=3;i<1000;i+=3)
{
if((a=i%10)==5||(b=(i%100-a)%10)==5||(c=(i%1000-b*10-a)%100)==5)
sum+=i;
}
printf("sum=%d",sum);
结果sum=16335