您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  C趣味程序百例(18)1~9分成1:2:3的三个3位数 【注册男护士专用博客】          

C趣味程序百例(18)1~9分成1:2:3的三个3位数

www.nanhushi.com     佚名   不详 

60.1~9分成1:2:3的三个3位数
    将1到9 这九个数字分成三个3位数,分求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍。问应当怎样分法。
*问题分析与算法设计
    问题中的三个数之间是有数学关系的,实际上只要确定第一个三位数就可以解决问题。
    试探第一个三位数之后,计算出另外两个数,将其分别分解成三位数字,进行判断后确定所试探的数是否就是答案。
    需要提醒的是:试探的初值可以是123,最大值是333。因为不可能超出该范围。
*程序与程序设计
#include<stdio.h>
int ok(int t,int *z);
int a[9];
void main()
{
    int m,count=0;
    for(m=123;m<=333;m++)           /*试探可能的三位数*/
        if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6))      /*若满足题意*/
            printf("No.%d:  %d %d %d\n",++count,m,2*m,3*m);    /*输出结果*/
}

int ok(int t,int *z)     /*分解t的值,将其存入z指向的三个数组元素,若满足要求返回1*/
{
    int *p1,*p2;
    for(p1=z;p1<z+3;p1++)
    {
        *p1=t%10;               /*分解整数*/
        t/=10;
        for(p2=a;p2<p1;p2++)     /*查询分解出的数字是否已经出现过*/
            if(*p1==0||*p2==*p1)return 0;    /*若重复则返回*/
    }
    return 1;                /*否则返回1*/
}
*运行结果
        No.1:192   384   576
        No.2:219   438   657
        No.3:273   546   819
        No.4:327   654   981
*思考题
    求出所有可能的以下形式的算式,每个算式中有九个数位,正好用尽1到9这九个数字。
    1)○○○+○○○=○○○                (共有168种可能的组合)
    2)○×○○○○=○○○○               (共有2种可能的组合)
    3)○○×○○○=○○○○               (共有7种可能的组合)
    4)○×○○○=○○×○○○             (共有13种可能的组合)
    5)○×○○○=○×○○○○             (共有28种可能的组合)
    6)○○×○○=○×○○○○             (共有7种可能的组合)
    7)○○×○○=○○×○○○             (共有11种可能的组合)

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目