问题 : 寻找三位数

时间:2023-01-31 00:13:11

题目描述

   算法提高  寻找三位数   
时间限制: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;
}