下面是一道2010年全国初中数学联合竞赛试题
现在用C语言编程解决:
算法一:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0;
int count=0;
int numbers[2010][4]= {};
for(i=1; i<=2010; i++)
{
if(i>0 && i<10)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=0;
numbers[i-1][3]=i;
}
else if(i>=10 && i<100)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=i/10;
numbers[i-1][3]=i%10;
}
else if(i>=100 && i<1000)
{
numbers[i-1][0]=0;
numbers[i-1][1]=i/100;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
else
{
numbers[i-1][0]=i/1000;
numbers[i-1][1]=i/100%10;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
}
for(i=0; i<2010; i++)
count+=numbers[i][0]+numbers[i][1]+numbers[i][2]+numbers[i][3];
printf("输出结果为:%d",count);
return 0;
}
#include <stdlib.h>
int main(void)
{
int i=0;
int count=0;
int numbers[2010][4]= {};
for(i=1; i<=2010; i++)
{
if(i>0 && i<10)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=0;
numbers[i-1][3]=i;
}
else if(i>=10 && i<100)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=i/10;
numbers[i-1][3]=i%10;
}
else if(i>=100 && i<1000)
{
numbers[i-1][0]=0;
numbers[i-1][1]=i/100;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
else
{
numbers[i-1][0]=i/1000;
numbers[i-1][1]=i/100%10;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
}
for(i=0; i<2010; i++)
count+=numbers[i][0]+numbers[i][1]+numbers[i][2]+numbers[i][3];
printf("输出结果为:%d",count);
return 0;
}
算法二:
#include <stdio.h>
int main(void)
{
int i1=0;
int i2=0;
int i3=0;
int i4=0;
int count=0;
for(i1=0; i1<=1; i1++)
{
for(i2=0; i2<=9; i2++)
{
for(i3=0; i3<=9; i3++)
{
for(i4=0; i4<=9; i4++)
count+=i1+i2+i3+i4;
}
}
}
for(i4=0; i4<=9; i4++)
count+=2+i4;
count+=3;
printf("输出结果为:%d",count);
return 0;
}
int main(void)
{
int i1=0;
int i2=0;
int i3=0;
int i4=0;
int count=0;
for(i1=0; i1<=1; i1++)
{
for(i2=0; i2<=9; i2++)
{
for(i3=0; i3<=9; i3++)
{
for(i4=0; i4<=9; i4++)
count+=i1+i2+i3+i4;
}
}
}
for(i4=0; i4<=9; i4++)
count+=2+i4;
count+=3;
printf("输出结果为:%d",count);
return 0;
}
当然,最终的结果是殊途同归:
现在拓展一下,让程序支持计算输入的任意整数(0-9999):
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0;
int input=0;
int count=0;
int numbers[9999][4]= {};
printf("输入数值:(0-9999)");
scanf("%d",&input);
if(input<0 || input>9999)
{
printf("输入数值错误");
return 0;
}
for(i=1; i<=input; i++)
{
if(i>0 && i<10)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=0;
numbers[i-1][3]=i;
}
else if(i>=10 && i<100)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=i/10;
numbers[i-1][3]=i%10;
}
else if(i>=100 && i<1000)
{
numbers[i-1][0]=0;
numbers[i-1][1]=i/100;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
else
{
numbers[i-1][0]=i/1000;
numbers[i-1][1]=i/100%10;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
}
for(i=0; i<input; i++)
count+=numbers[i][0]+numbers[i][1]+numbers[i][2]+numbers[i][3];
printf("输出结果为:%d",count);
return 0;
}
操作如图:
#include <stdlib.h>
int main(void)
{
int i=0;
int input=0;
int count=0;
int numbers[9999][4]= {};
printf("输入数值:(0-9999)");
scanf("%d",&input);
if(input<0 || input>9999)
{
printf("输入数值错误");
return 0;
}
for(i=1; i<=input; i++)
{
if(i>0 && i<10)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=0;
numbers[i-1][3]=i;
}
else if(i>=10 && i<100)
{
numbers[i-1][0]=0;
numbers[i-1][1]=0;
numbers[i-1][2]=i/10;
numbers[i-1][3]=i%10;
}
else if(i>=100 && i<1000)
{
numbers[i-1][0]=0;
numbers[i-1][1]=i/100;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
else
{
numbers[i-1][0]=i/1000;
numbers[i-1][1]=i/100%10;
numbers[i-1][2]=i/10%10;
numbers[i-1][3]=i%10;
}
}
for(i=0; i<input; i++)
count+=numbers[i][0]+numbers[i][1]+numbers[i][2]+numbers[i][3];
printf("输出结果为:%d",count);
return 0;
}
操作如图: