60.1~9分成1:2:3的三個3位數(shù)
將1到9 這九個數(shù)字分成三個3位數(shù),分求第一個3位數(shù),正好是第二個3位數(shù)的二倍,是第三個3位數(shù)的三倍。問應當怎樣分法。
*問題分析與算法設計
問題中的三個數(shù)之間是有數(shù)學關系的,實際上只要確定第一個三位數(shù)就可以解決問題。
試探第一個三位數(shù)之后,計算出另外兩個數(shù),將其分別分解成三位數(shù)字,進行判斷后確定所試探的數(shù)是否就是答案。
需要提醒的是:試探的初值可以是123,值是333。因為不可能超出該范圍。
*程序與程序設計
#include
int ok(int t,int *z);
int a[9];
void main()
{
int m,count=0;
for(m=123;m<=333;m++) /*試探可能的三位數(shù)*/
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); /*輸出結(jié)果*/
}
int ok(int t,int *z) /*分解t的值,將其存入z指向的三個數(shù)組元素,若滿足要求返回1*/
{
int *p1,*p2;
for(p1=z;p1 {
*p1=t%10; /*分解整數(shù)*/
t/=10;
for(p2=a;p2 if(*p1==0||*p2==*p1)return 0; /*若重復則返回*/
}
return 1; /*否則返回1*/
}
*運行結(jié)果
No.1:192 384 576
No.2:219 438 657
No.3:273 546 819
No.4:327 654 981
*思考題
求出所有可能的以下形式的算式,每個算式中有九個數(shù)位,正好用盡1到9這九個數(shù)字。
1)○○○+○○○=○○○ (共有168種可能的組合)
2)○×○○○○=○○○○ (共有2種可能的組合)
3)○○×○○○=○○○○ (共有7種可能的組合)
4)○×○○○=○○×○○○ (共有13種可能的組合)
5)○×○○○=○×○○○○ (共有28種可能的組合)
6)○○×○○=○×○○○○ (共有7種可能的組合)
7)○○×○○=○○×○○○ (共有11種可能的組合)
將1到9 這九個數(shù)字分成三個3位數(shù),分求第一個3位數(shù),正好是第二個3位數(shù)的二倍,是第三個3位數(shù)的三倍。問應當怎樣分法。
*問題分析與算法設計
問題中的三個數(shù)之間是有數(shù)學關系的,實際上只要確定第一個三位數(shù)就可以解決問題。
試探第一個三位數(shù)之后,計算出另外兩個數(shù),將其分別分解成三位數(shù)字,進行判斷后確定所試探的數(shù)是否就是答案。
需要提醒的是:試探的初值可以是123,值是333。因為不可能超出該范圍。
*程序與程序設計
#include
int ok(int t,int *z);
int a[9];
void main()
{
int m,count=0;
for(m=123;m<=333;m++) /*試探可能的三位數(shù)*/
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); /*輸出結(jié)果*/
}
int ok(int t,int *z) /*分解t的值,將其存入z指向的三個數(shù)組元素,若滿足要求返回1*/
{
int *p1,*p2;
for(p1=z;p1
*p1=t%10; /*分解整數(shù)*/
t/=10;
for(p2=a;p2
}
return 1; /*否則返回1*/
}
*運行結(jié)果
No.1:192 384 576
No.2:219 438 657
No.3:273 546 819
No.4:327 654 981
*思考題
求出所有可能的以下形式的算式,每個算式中有九個數(shù)位,正好用盡1到9這九個數(shù)字。
1)○○○+○○○=○○○ (共有168種可能的組合)
2)○×○○○○=○○○○ (共有2種可能的組合)
3)○○×○○○=○○○○ (共有7種可能的組合)
4)○×○○○=○○×○○○ (共有13種可能的組合)
5)○×○○○=○×○○○○ (共有28種可能的組合)
6)○○×○○=○×○○○○ (共有7種可能的組合)
7)○○×○○=○○×○○○ (共有11種可能的組合)