现在的位置: 首页 > 综合 > 正文

用C语言解决初中奥数题

2013年01月30日 ⁄ 综合 ⁄ 共 2449字 ⁄ 字号 评论关闭

下面是一道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 <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;
}
当然,最终的结果是殊途同归:
图片
现在拓展一下,让程序支持计算输入的任意整数(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;
}
操作如图:
图片

抱歉!评论已关闭.