level 1
问题描述:将1,2…9共九个数分成3组,分别组成三个数,且使这三个书构成1:2:3的比例,试求出所有满足条件的三个三位数;例如192,384,576。什么算法?
2006年08月26日 07点08分
1
level 1
#include
void f(int a[3][3]);void main(){int a[3][3];for(int i1=1;i1<=9;i1++){for(int i2=1;i2<=9;i2++){if(i2==i1)continue;for(int i3=1;i3<=9;i3++){if(i3==i1||i3==i2)continue;a[0][0]=i1;a[0][1]=i2;a[0][2]=i3;f(a);}}}}void f(int a[][3]){int x=a[0][0]*100+a[0][1]*10+a[0][2];if(2*x>987)return;if(3*x>987)return;a[1][0]=2*x/100;a[1][1]=2*x/10%10;a[1][2]=2*x%10;for(int i=3;i<=5;i++){for(int j=0;j<=i-1;j++)if(*(*a+j)==*(*a+i))return;}a[2][0]=3*x/100;a[2][1]=3*x/10%10;a[2][2]=3*x%10;for(i=6;i<=8;i++){if(*(*a+i)==0)return;for(int j=0;j<=i-1;j++)if(*(*a+j)==*(*a+i))return;}for(i=0;i<=2;i++){for(int j=0;j<=2;j++){printf("%d",a[i][j]);}printf("\n");}printf("\n");return;}没想出来再好的算法
2006年08月27日 03点08分
4
level 1
1:2:3的比例a:b:c因为是三位数。所以第a的范围很容易确定是123 至 987/3=329代码如下#include "stdio.h"bool mark[9];void ResetMark(){for(short i = 0; i< 9; i++)mark[i] = false;}bool IsLegal(unsigned short nNumber){unsigned short a,b,c;a = nNumber/100;b = (nNumber - a*100)/10;c = nNumber%10;if(a==b || b==c || a==c || mark[a-1] || mark[b-1] || mark[c-1] ||a == 0 || b == 0 || c==0)return false;else{mark[a-1] = true;mark[b-1] = true;mark[c-1] = true;return true;}}int main(){for(short i = 123; i < 329; i++){if(IsLegal(i) && IsLegal(i*2) && IsLegal(i*3))printf("a=%d b=%d c=%d \n",i,i*2,i*3);ResetMark();}return 0;}
2006年08月27日 04点08分
5
level 1
我是用VC的编译器编译的,C++编译器都应该没有问题。C语言的C99标准里面是有bool型的,关键字是_Bool即使没有,也可以用枚举类型自定义bool类型变量。
2006年08月28日 04点08分
10