【蓝桥杯day3】

题一完美立方问题

 

题目描述:

 解题代码:

import java.util.*;

public class Main {


    public static void main(String[] args) {
        Scanner sacn =new Scanner(System.in);
        int n=sacn.nextInt();
        for(int a=2;a<=n;a++){
            for(int b=2;b<a;b++){
                for(int c=b;c<a;c++){
                    for(int d=c;d<a;d++){
                        if(Math.pow(a,3)==Math.pow(b,3)+Math.pow(c,3)+Math.pow(d,3)){
                            System.out.printf("Cube=%d,Triple=(%d,%d,%d)\n",a,b,c,d);
                        }
                    }
                }
            }
        }



    }
}

算法思路:没什么思路解题就行

题目二:生理周期

题目描述:

 解题代码:

import java.util.Scanner;

public class 生理周期 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int p,e,i,d;
        int num=0;
        while (scanner.hasNext()) {
             p = scanner.nextInt();
             e = scanner.nextInt();
             i = scanner.nextInt();
             d = scanner.nextInt();
             int k ;
             ++num;

            for (k = d + 1; (k - p) % 23 != 0; ++k) ;
            for (; (k - e) % 28 != 0; k += 23) ;
            for (; (k - i) % 33 != 0; k += 23 * 28) ;
            int m = k - d;
            System.out.println("第" + num + "个实例:" + m);

        }
    }
}

注意事项:

1.++i和i++的区别,前者先加一在进行运算,后者先进行运算在加一

2.for循环在这里的作用:for循环的新用法,思维不要局限在for(i=0;i<n;i++)上,for循环在这里起的作用:既有判断加之变量的变化,神奇

算法思想:

先检验体力的日子,然后找体力和情商重合的日子,在找重合的日子的时候,变化条件变成+23;最后再找三者重逢的日子,变化条件变成了+23*28(23和28的公倍数)

题目三:称硬币

题目描述:

 解题代码:

package 第三天;

import java.util.Scanner;

public class 称硬币 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String[][] right = new String[4][4];
        //String [][] left=new String[3][7];
        //String [][] result=new String[3][7];
        while (n-- > 0) {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    right[i][j] = scanner.next();
                }
            }
            for (char c = 'A'; c < 'L'; c++) {
                String s = String.valueOf(c);
                if (isFake(right, s, true)) {
                    System.out.println(s + " is the fake coin and it is light");
                    break;
                } else if (isFake(right, s, false)) {
                    System.out.println(s + " is the fake coin and it is heavy");
                    break;
                }
            }


        }


    }

    static boolean isFake(String[][] right, String s, boolean ligth) {
        String pright = null;
        String pleft = null;
        //String result=null;

        for (int i = 0; i < 3; i++) {
//            pright=right[i][0];
//            pleft=right[i][1];
//            result=right[i][2];
            if (ligth) {
                pleft = right[i][0];
                pright = right[i][1];
            } else {
                pleft = right[i][1];
                pright = right[i][0];
            }
            switch (right[i][2]) {
                case "up":
                    if (pleft.contains(s))
                        return false;
                    break;
                case "even":
                    if (pright.contains(s) || pleft.contains(s))
                        return false;
                    break;
                case "down":
                    if (pright.contains(s))
                        return false;
                    break;
            }


        }
        return true;
    }


}

注意事项:

1.while(n-->),它的意思是循环n次,除了最常用的 for (int i = 0; i < n; ++i) {...} 之外,还可以写 while (n-- > 0) {...} 和 while (--n >= 0) {...}

2.isfake函数在前面要加上static关键字,原因:mian()方法是静态方法,而自己定义的那个方法如果不加static是成员方法,成员方法无法在静态方法中调用

算法思想:

解决此题的方法是先用一个二维数组存取输入的三次称量的情况,right[称量的次数][左边砝码的情况,右边砝码的情况,结果],然后枚举所有的砝码,先判断塔是不是轻的,然后调用isFake函数,isFake函数有三个参数,二维数组,验证的砝码代码,是否为轻。反之则砝码是重的

isFake函数:light 为true时,砝码是假的,且为轻,为false时砝码是假的,且是重的。先用两个指针代表左边砝码情况和右边砝码情况,假设是轻的然后进行判断,反之是重的然后进行判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值