zoukankan      html  css  js  c++  java
  • 洛谷 P1008 三连击 题解

    P1008 三连击

    题目


    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代码(version 1)

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    //	int a[11];
    //	
    //	for(int i=123;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
    ",k,j,i);
    //				}
    //				
    //			}
    //		}
    //	} 
    	printf("192 384 576
    219 438 657
    273 546 819
    327 654 981
    ");
    	return 0;
    }
    

    AC代码(version 2)

    #include<bits/stdc++.h>
    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
    ",i,i*2,i*3);
        }
    return 0;
    }
    
  • 相关阅读:
    Map-HashMap
    Collection(List & Set)
    Redis五种数据类型详解
    Redis基本数据结构详解
    分布式Session管理
    一致性算法
    Zookeeper
    分布式锁
    线程池原理解析
    疑点难点1.1
  • 原文地址:https://www.cnblogs.com/Fhr2001/p/12031257.html
Copyright © 2011-2022 走看看