java:P1618 三连击(升级版)

洛谷题目:P1618 三连击(升级版)

题目如下:

我的代码:

package 算法竞赛;

import java.io.*;
import java.util.Arrays;
/*
思路:由i得出其余两个数,然后判断即可,别忘了count=0时,输出No!!!
 */
public class Test3{
    
    
    static StringBuilder str = new StringBuilder();
    static BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in = new StreamTokenizer(ins);
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException{
    
    
        int[] ints = new int[10];               // 该数组用来判断1到9的数字是否重复
        in.nextToken();                         // 接收数据
        int a = (int)in.nval;
        in.nextToken();
        int b = (int)in.nval;
        in.nextToken();
        int c = (int)in.nval;
        int z = a+b+c;
        int k = 0;
        int count = 0;
        for(int i = 123;i<330;i++)              // 因为不能重复且不能为0,所以从123开始,而A<B<C,所以A最大333,
        {
    
                                           // 但是根据题意最大329,所以<330
            int j = (int)(i*1.0/a*b);           // 由i得出其余两个数字
            int m = (int)(i*1.0/a*c);
            Arrays.fill(ints,0);            // 清理数组,以防判断出错
            ints[i%10]++;                       // 对应的下标++
            ints[i/10%10]++;
            ints[i/100%10]++;
            ints[j%10]++;
            ints[j/10%10]++;
            ints[j/100%10]++;
            ints[m%10]++;
            ints[m/10%10]++;
            ints[m/100%10]++;
            for(int t1 = 1;t1<ints.length;t1++)
            {
    
    
                if(ints[t1]!=1)                 // 如果有不为1的,那就continue,看下一个
                {
    
    
                    k = 1;
                    break;
                }
            }
            if(k==1)                            // 如果k==1,那就是说明这里有不符合题意的,那就看下一个
            {
    
    
                k = 0;                          // 别忘了别k变回来,所以 k = 0
                continue;
            }
            count++;                            // 能到这里说明符合题意,所以count++
            str.append(i+" "+j+" "+m+" "+"\n");         // 记录应该输出的数据
        }
        if(count == 0)                          // 判断输出
        {
    
    
            System.out.println("No!!!");
            System.exit(0);               // 其实不用提前结束的,但是为了使逻辑通常,写上这句
        }
        out.print(str);                         // 输出数据
        out.close();
    }
}

1、能直接用式子得出的,直接用式子表示
2、如果几个数成比例,则取某一个数,然后让该数*1.0再除以自己的比率,再乘以其他数即可得到对应的其他数,别忘了强制类型转换(int)

如有谬误,请务必告知,以免误导他人

猜你喜欢

转载自blog.csdn.net/weixin_51304266/article/details/121364237