论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: 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趣味编程百例(13)

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

42.最大公约数和最小公倍数
43.分数比较
44.分数之和




42.最大公约数和最小公倍数
    求任意两个正整数的最大公约数和(GCD)和最小公倍数(LCM)
*问题分析与算法设计
    手工方式求两个正整数的蝚大公约数的方法是用辗转相除法,在程序中可以模拟这种方式。
*程序与程序注释
#include<stdio.h>
void main()
{
    int a,b,num1,num2,temp;
    printf("Input a & b:");
    scanf("%d%d",&num1,&num2);
    if(num1>num2)                /*找出两个数中的较大值*/
    {
        temp=num1; num1=num2; num2=temp;     /*交换两个整数*/
    }
    a=num1; b=num2;
    while(b!=0)             /*采用辗转相除法求最大公约数*/
    {
        temp=a%b;
        a=b;
        b=temp;
    }
    printf("The GCD of %d and %d is: %d\n",num1,num2,a);  /*输出最大公约数*/
    printf("The LCM of them is: %d\n",num1*num2/a);       /*输出最小公倍数*/
}
*运行结果
    1.Input a & b: 20  55
        The GCD of 20 and 55 is: 5
        The LCM of them is: 220

    2.Input a & b: 17  71
        The GCD of 17 and 71 is: 1
        The LCM of them is: 1207

    3.Input a & b: 24  88
        The GCD of 24 and 88 is: 8
        The LCM of them is: 264

    4.Input a & b: 35  85
        The GCD of 35 and 85 is: 5
        The LCM of them is: 595

*思考题
    求一个最小的正整数,这个正整数被任意n(2<=n<=10)除都是除不尽的,而且余数总是(n-1)。例如:被9除时的余数为8。要求设计一个算法,不答应枚举与除2、除3、....、除9、除10有关的命令,求出这个正整数。

43.分数比较
    比较两个分数的大小。
*问题分析与算法设计
    人工方式下比较分数大小最常用的方法是:进行分数的通分后比较分子的大小。可以编程模拟手式方式。
*程序与程序注释
#include<stdio.h>
int zxgb(int a,int b);
void main()
{
    int i,j,k,l,m,n;
    printf("Input two FENSHU:\n");
    scanf("%d/%d,%d/%d",&i,&j,&k,&l);       /*输入两个分数*/
    m=zxgb(j,l)/j*i;                  /*求出第一个分数通分后的分子*/
    n=zxgb(j,l)/l*k;                  /*求出第二个分数通分后的分子*/
    if(m>n)   printf("%d/%d>%d/%d\n",i,j,k,l);    /*比较分子的大小*/
    else if(m==n)   printf("%d/%d=%d/%d\n",i,j,k,l);    /*输出比较的结果*/
        else        printf("%d/%d<%d/%d\n",i,j,k,l);
}

int zxgb(int a,int b)
{
    long int c;
    int d;
    if(a<b) c=a,a=b,b=c;     /*若a<b,则交换两变量的值*/
    for(c=a*b;b!=0;)
    {
        d=b;  b=a%b;  a=d;
    }
    return (int)c/a;
}
*运行结果
        输入: 4/5,6/7          输出: 4/5<6/7
        输入: 8/4,16/32        输出: 8/4>16/32
        输入:16/32,4/8         输出: 16/32=4/8

44.分数之和
    求这样的四个自然数p,q,r,s(p<=q<=r<=s),使得以下等式成立:           

*问题分析与算法设计
    若规定p<=q<=r<=s,将原式通分、化简并整理后得到:
        2<=p<5     p<=q<7     q<r<13
    采用最简单的穷举方法可以很方便的求解。
程序与程序注释:
#include<stdio.h>
void main()
{
    int p,q,r,s,count=0;
    printf("The 4 fractions which sum is equal 1 are:\n");
    for(p=2;p<5;p++)                /*穷举分母*/
        for(q=p;q<7;q++)
            for(r=q;r<13;r++)
                if(p*q*r-q*r-p*r-p*q!=0)
                {
                    s=(p*q*r)/(p*q*r-q*r-p*r-p*q);        /*求出s的值*/
                    if(!((p*q*r)%(p*q*r-q*r-p*r-p*q))&&s>=r)
                        printf("[%2d]    1/%d+1/%d+1/%d+1/%d=1\n",++count,p,q,r,s);
                                                            /*输出结果*/
                }
}
*运行结果

*思考题
    将1、2、3、4、5、6、7、8、9九个数字分成以下三种分数形式之一,每个数字只能用一次,使得该分数刚好等于一个整数。


求所有满足条件的表示形式。
(参考答案:某些自然数没有这种表示形式,如:1、2、3、4、15、18等。此外整数100有11种满足条件的表示形式;89的表示形式最多,共有36种;三种形式中,最大可表示的整数为794。)
上一篇:{实例}C趣味编程百例(12) 人气:5493
下一篇:{实例}C趣味程序百例(14) 人气:7285
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程