Los P1008 Valley trifecta solution to a problem

P1008 trifecta

topic


Main Idea:

    用1~9构造三个呈1:2:3比例的三位数,每个数用一次。

Summary:

    1.对于有些可以用数学在草稿纸上简化时间复杂度和代码的问题,就先简化。
    2.这题其实不用三重循环,只要让前一个数乘以2和3就可以得到后两个数了。

Problem Solving Idea:

    1.先用O(n^3)解,然后得出的答案用O(1)输出。
    2.O(n)得出第一个数,然后*2、*3得到后面的数。

AC codes (version 1)

#include<bits/stdc++.h>
using namespace std;
int main()
{
//  int a[11];
//  
//  for(int i=100;i<1000;i++){
//      for(int j=100;j<1000;j++){
//          for(int k=100;k<1000;k++){
//              int flag=1;
//              memset(a,0,sizeof(a));
//              a[i/100]++;a[i%10]++;a[i/10%10]++;
//              a[j/100]++;a[j%10]++;a[j/10%10]++;
//              a[k/100]++;a[k%10]++;a[k/10%10]++;
//              for(int v=1;v<10;v++){
//                  if(a[v]==1) flag=1;
//                  else{
//                      flag=0;
//                      break;
//                  }
//              }
//              if(flag==0) continue;
//              else if(k*3==i&&k*2==j){
//                  printf("%d %d %d\n",k,j,i);
//              }
//              
//          }
//      }
//  } 
    printf("192 384 576\n219 438 657\n273 546 819\n327 654 981\n");
    return 0;
}

AC codes (version 2)

#include<cstdio>
#include<cstring>
int i,j,v;
int a[10];
int main()
{
    for(i=192;i<=327;i++)
    {
        memset(a,0,sizeof(a));v=0;
        a[i%10]=a[i/10%10]=a[i/100]=a[i*2%10]=a[i*2/10%10]=a[i*2/100]=a[i*3%10]=a[i*3/10%10]=a[i*3/100]=1;
        for(j=1;j<=9;j++) v+=a[j];
        if(v==9) printf("%d %d %d\n",i,i*2,i*3);
    }
return 0;
}

Guess you like

Origin www.cnblogs.com/Fhr2001/p/12031257.html