论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C趣味程序百例(07)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:44:52


21.4位反序数
22.求车速
23.阿姆斯特朗数
24.完全数




21.4位反序数
    设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。
*题目分析与算法设计
    可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式:
        (i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i)
    的i、j、k、l即构成N。
*程序说明与注释
#include<stdio.h>
void main()
{
    int i;
    for(i=1002;i<1111;i++)        /*穷举四位数可能的值*/
        if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9)
                                  /*判定反序数是否是原整数的9倍*/
            printf("The number satisfied stats condition is: %d\n",i);
                                    /*若是则输出*/
}
*运行结果
    The number satisfied states condition is:1089

-----------------------------------------------------------------

22.求车速
    一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?
*题目分析与算法设计
    根据题意,设所求对称数为i,其初值为95589,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。
*程序说明与注释
#include<stdio.h>
void main()
{
    int t,a[5];            /*数组a存放分解的数字位*/
    long int k,i;
    for(i=95860;;i++)      /*以95860为初值,循环试探*/
    {
        for(t=0,k=100000;k>=10;t++)   /*从高到低分解所取i值的每位数*/
        {                               /* 字,依次存放于a[0]~a[5]中*/
            a[t]=(i%k)/(k/10);        
            k/=10;
        }
        if((a[0]==a[4])&&(a[1]==a[3]))
        {
            printf("The new symmetrical number kelometers is:%d%d%d%d%d\n",
                                  a[0],a[1],a[2],a[3],a[4]);
            printf("The velocity of the car is: %.2f\n",(i-95859)/2.0);
            break;
        }
    }
}
*运行结果
    The new symmetrical number kelometers is:95959.
    The velocity of the car is:50.00

*思考题
    将一个数的数码倒过来所得到的新数叫原数的反序数。假如一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。

-----------------------------------------------------------------------

23.阿姆斯特朗数
    假如一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。
如 407=43+03+73就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。
*题目分析与算法设计
    可采用穷举法,依次取1000以内的各数(设为i),将i的各位数字分解后,据阿姆斯特朗数的性质进行计算和判定。
*程序说明与注释
#include<stdio.h>
void main()
{
    int i,t,k,a[3];
    printf("There are follwing Armstrong number smaller than 1000:\n");
    for(i=2;i<1000;i++)         /*穷举要判定的数i的取值范围2~1000*/
    {
        for(t=0,k=1000;k>=10;t++)     /*截取整数i的各位(从高向低位)*/
        {
            a[t]=(i%k)/(k/10);        /*分别赋于a[0]~a[2}*/
            k/=10;
        }
        if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i)
                                       /*判定i是否为阿姆斯特朗数*/
            printf("%5d",i);            /*若满足条件,则输出*/
        
    }
    printf("\n");
}
*运行结果
    There are following Armstrong number smaller than 1000:
      153        370        371        407

------------------------------------------------------------

24.完全数
    假如一个数恰好等于它的因子之和,则称该数为“完全数”。
*题目分析与算法设计
    根据完全数的定义,先计算所选取的整数a(a的取值1~1000)的因子,将各因子累加于m,若m等于a,则可确认a为完全数。
*程序说明与注释
#include<stdio.h>
void main()
{
    int a,i,m;
    printf("There are following perfect numbers smaller than 1000:\n");
    for(a=1;a<1000;a++)      /*循环控制选取1~1000中的各数进行判定*/
    {
        for(m=0,i=1;i<=a/2;i++)   /*计算a的因子,并将各因子之和m=a,则a是完全数输出*/
            if(!(a%i))m+=i;
        if(m==a)
            printf("%4d    ",a);
    }
    printf("\n");
}
*运行结果
    TThere are following perfect numbers smaller than 1000:
    6        28        496
 

上一篇:{实例}C趣味编程百例(06) 人气:7404
下一篇:{实例}C趣味编程百例(08) 人气:5519
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058