欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在编码之前优先条件选择的重要性

程序员文章站 2024-03-17 09:14:04
...

 

题目://用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。

我的想法是一个个位数的判断,即优先以各位数不能相等为判断条件,这就导致了我的代码运算量太高,时间过长
代码如下:题目://用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。

我的想法是一个个位数的判断,即优先以各位数不能相等为判断条件,这就导致了我的代码运算量太高,时间过长
代码如下:

#include<iostream>
#include<time.h>
using namespace std;

int main()
{
	for(int a=1;a<10;a++)
	 for(int b=1;b<10;b++)
	  for(int c=1;c<10;c++)
	   for(int d=1;d<10;d++)
	    for(int e=1;e<10;e++)
	     for(int f=1;f<10;f++)
	       for(int g=1;g<10;g++)
	        for(int h=1;h<10;h++)
	         for(int i=1;i<10;i++)
	      {
	      	if(a==b||a==c||a==d||a==e||a==f||a==g||a==h||a==i||b==c||b==d||b==e||b==f||b==g||b==h||b==i||c==d||c==e||c==f||c==g||c==h||c==i||d==e||d==f||d==g||d==h||d==i||e==f||e==g||e==h||e==i||f==g||f==h||f==i||g==h||g==i||h==i)
	      	      continue;
	      	else
	      	{
	      		int s1=a*100+b*10+c;
	      		int s2=d*100+e*10+f;
	      		int s3=g*100+h*10+i;
	      		if(2*s1==s2&&3*s1==s3&&3*s2==2*s3)
	      		  cout<<s1<<' '<<s2<<' '<<s3<<endl;
			  }
		  }
		  cout<<(double)clock()/CLOCKS_PER_SEC;
		    cout<<endl<<(double)clock()/CLOCKS_PER_SEC;
		  return 0;
}

 

之后网上查找资料,发现可以以比例(即1:2:3)为优先条件,至于每位数不能相同,则根据他们每位数相加,相乘是定值来判断。(相加必须是45,相乘是362880)

代码如:

#include <stdio.h>
#include<time.h>
 
void result(int num, int &result_add, int &result_mul)
{
    int i, j, k;
 
    i = num / 100;        //百位
    j = num / 10 % 10;    //十位
    k = num % 10;         //个位
 
    result_add += i + j + k;    //分解出来的位数相加
    result_mul *= i * j * k;    //相乘
}
 
 
int main()
{
    int i, j, k;
    int result_add, result_mul;
 
    for(i = 123; i <=329; i++)
    {
        j = i * 2;
        k = i * 3;
 
        result_add = 0;
        result_mul = 1;
 
 
 
        result(i, result_add, result_mul);
        result(j, result_add, result_mul);
        result(k, result_add, result_mul);
 
        if(result_add == 45 && result_mul == 362880)
            printf("%d %d %d\n", i, j, k);
    }
    printf("%f\n",(double)clock()/CLOCKS_PER_SEC);
    return 0;
}

自己没有想出来这样做,说明自己的思维还不够灵活,不能够随机转化

 

 

 

相关标签: 个人成长