![]() ![]() |
|
C趣味程序百例(18)1~9分成1:2:3的三个3位数 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 13:59:08 文章录入:杜斌 责任编辑:杜斌 | |
|
|
将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种可能的组合) |
|
![]() ![]() |