题目描述
算法提高 寻找三位数时间限制:1.0s 内存限制:512.0MB
问题描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成
1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输入格式
无输入文件
输出格式
输出每行有三个数,为满足题设三位数。各行为满足要求的不同解。
思路:可以深搜搜索1-9的全排列,注意数字不能重复,但是不如直接9层循环暴力跑省事,跑出来直接打表完事.....
#include<stdio.h>//打表代码 #include<string.h> int main() { int x1,x2,x3,x4,x5,x6,x7,x8,x9,i,j,k,m,n; int a[20];//记录每个数字出现的次数 for(x1=1;x1<=9;x1++) { for(x2=1;x2<=9;x2++) for(x3=1;x3<=9;x3++) for(x4=1;x4<=9;x4++) for(x5=1;x5<=9;x5++) for(x6=1;x6<=9;x6++) for(x7=1;x7<=9;x7++) for(x8=1;x8<=9;x8++) for(x9=1;x9<=9;x9++) { memset(a,0,sizeof(a)); /* for(i=1;i<=9;i++) printf("%d ",a[i]);*/ a[x1]++; a[x2]++; a[x3]++; a[x4]++; a[x5]++; a[x6]++; a[x7]++; a[x8]++; a[x9]++; int f=0; for(i=1;i<=9;i++) { // printf("%d ",a[i]); if(a[i]==1)//判断每个数字是否出现一回 { f++; } } // printf("\n"); if(f==9) { int a=x1*100+x2*10+x3; int b=x4*100+x5*10+x6; int c=x7*100+x8*10+x9; if(a+b==c) { // printf("%d %d %d\n",a,b,c); if(c/a==3&&c%a==0&&b/a==2&&b%a==0) { printf("%d %d %d\n",a,b,c); } // printf("%d%d%d %d%d%d %d%d%d\n",x1,x2,x3,x4,x5,x6,x7,x8,x9); } } } } return 0; } //打出来的表,就四组数据.. #include<stdio.h> #include<string.h> int main() {
int x1,x2,x3,x4,x5,x6,x7,x8,x9,i,j,k,m,n; printf("192 384 576\n"); printf("219 438 657\n"); printf("273 546 819\n"); printf("327 654 981\n"); return 0; }