如何在不使用括号的情况下解决此问题?

时间:2019-04-30 04:52:08

标签: java

这是CodeGym的一项练习。

运动是这样:

在main方法中,正确放置加号和减号,以使变量结果等于20。 只能在声明变量结果的行中放置符号。

请勿更改此行中变量的顺序。 每个变量都必须以加号或减号开头。

要求:

1。变量值:请勿更改a,b,c或d。

2。声明变量结果的行中的每个变量(a,b,c和d)必须以加号或减号开头。

3。程序应在屏幕上显示数字20。

4。加号和减号必须正确放置。

我试图使用Math.abs()返回正数20,但是会引发错误。

我试图添加一些变量,但仍然会引发错误。

此外,尝试使用括号,仍然是同样的问题。

    package com.codegym.task.task01.task0137;

    /* 
    Only 20 will do

    */

    public class Solution {
        public static int a = 1;
        public static int b = 3;
        public static int c = 9;
        public static int d = 27;


        public static void main(String[] args) 
   {

            int result = + a - b + c - d;

            System.out.println(result);
        }
    }

谢谢大家! 我没有尝试int结果=-a + b-c + d;你们几个建议:)是正确的))

5 个答案:

答案 0 :(得分:2)

这是数学运算,结果应为27 - 9 + 3 - 1,并且您可以使用一元负数生成-1。也就是说,

int result = -a + b - c + d;

答案 1 :(得分:1)

这更多是数学问题,而不是与Java /编程技能有关的问题。

我为解决以下问题而采取的合理步骤

  1. 给定的数字为1,3,9,27,输出应为20,这意味着27在任何情况下都不能为负数。因此为27分配+号。

  2. 取下一个数字9,只能取“-”号,否则无论余数的什么符号,总和将超过20。

  3. 现在上述两个步骤的结果将为27-9 =18。要获得总20,现在将+号设置为3,将-号设置为1

public class Solution {
    public static int a = 1;
    public static int b = 3;
    public static int c = 9;
    public static int d = 27;

    public static void main(String[] args) {
        int result = - a + b - c + d;
        System.out.println(result);
    }
}

答案 2 :(得分:0)

尝试执行此操作。

package com.codegym.task.task01.task0137;

public class Solution 
{
    public static int a = 1;
    public static int b = 3;
    public static int c = 9;
    public static int d = 27;


    public static void main(String[] args) 
    {

        int result = d - c + b - a;

        System.out.println(result);
    }
}

答案 3 :(得分:0)

如果不要求更改变量的顺序,则如下所示:

package com.codegym.task.task01.task0137;

public class Solution 
{
    public static int a = 1;
    public static int b = 3;
    public static int c = 9;
    public static int d = 27;


    public static void main(String[] args) 
    {

        int result = -a + b - c + d;

        System.out.println(result);
    }
}

答案 4 :(得分:0)

一个简单的数学问题,显然该分配的正确结果如前所述:

int result = - a + b - c + d  

但是我真的很想看看是否可以对前面的加号或减号的每个组合给出解决方案。这确实意味着我必须对要求的解释有些松懈。

我对要求的解释:

  • 请勿使用括号。 -> 好,没有括号
  • 变量值:请勿更改a,b,c或d。 -> 变量a,b,c和d在结果变量赋值之前和之后必须具有相同的值
  • 声明变量结果的行中的每个变量(a,b,c和d)必须以加号或减号开头。 -> 在前,是的,但不一定是在前的第一个运算符

  • 程序应在屏幕上显示数字20。 -> 确定,打印结果等等

  • 必须正确放置加号和减号。 -> 不要使用增量(++)或减量(-)运算符

此解决方案使用一元,算术和按位运算符将值20分配给结果变量,而无需修改原始变量。
打印输出显示变量 a b c的结果和当前值 d ,以证明原始值不变。

public class Solution {
    public static int a = 1;
    public static int b = 3;
    public static int c = 9;
    public static int d = 27;

    public static void main(String[] args) {

        System.out.println("--------------------------------------");

        int result = + ~a  + ~b  + ~c ^+ ~d;
            printVariables("++++", result, a, b, c, d);
        result = + ~a *+  b ^+  c  -  d;
            printVariables("+++-", result, a, b, c, d);
        result = + ~a *+  b ^- ~c  + ~d;
            printVariables("++-+", result, a, b, c, d);
        result = + ~a  +  b  -  c  - ~d;
            printVariables("++--", result, a, b, c, d);
        result = +  a  - ~b ^+ ~c  +  d;
            printVariables("+-++", result, a, b, c, d);
        result = + ~a  - ~b  + ~c  - ~d;
            printVariables("+-+-", result, a, b, c, d);
        result = + ~a  - ~b  -  c  +  d;
            printVariables("+--+", result, a, b, c, d);
        result = + ~a  -  b ^- ~c  -  d;
            printVariables("+---", result, a, b, c, d);
        result = - ~a  +  b ^+ ~c  +  d;
            printVariables("-+++", result, a, b, c, d);
        result = -  a  +  b  + ~c  - ~d;
            printVariables("-++-", result, a, b, c, d);
        result = -  a  +  b  -  c  +  d;
            printVariables("-+-+", result, a, b, c, d);
        result = -  a  + ~b ^- ~c  -  d;
            printVariables("-+--", result, a, b, c, d);
        result = -  a  - ~b  + ~c  +  d;
            printVariables("--++", result, a, b, c, d);
        result = - ~a  - ~b ^+ ~c  - ~d;
            printVariables("--+-", result, a, b, c, d);
        result = -  a ^- ~b ^- ~c ^-  d;
            printVariables("----", result, a, b, c, d);

        System.out.println("--------------------------------------");

    }

    private static void printVariables(String signs, int result, int a, int b, int c, int d) {
        System.out.println("("+ signs +")   Result="+ result +";   a="+ a +";   b="+ b +";   c="+ c +";   d="+ d +";");
    }
}

打印输出:

--------------------------------------
(++++)   Result=20;   a=1;   b=3;   c=9;   d=27;
(+++-)   Result=20;   a=1;   b=3;   c=9;   d=27;
(++-+)   Result=20;   a=1;   b=3;   c=9;   d=27;
(++--)   Result=20;   a=1;   b=3;   c=9;   d=27;
(+-++)   Result=20;   a=1;   b=3;   c=9;   d=27;
(+-+-)   Result=20;   a=1;   b=3;   c=9;   d=27;
(+--+)   Result=20;   a=1;   b=3;   c=9;   d=27;
(+---)   Result=20;   a=1;   b=3;   c=9;   d=27;
(-+++)   Result=20;   a=1;   b=3;   c=9;   d=27;
(-++-)   Result=20;   a=1;   b=3;   c=9;   d=27;
(-+-+)   Result=20;   a=1;   b=3;   c=9;   d=27;
(-+--)   Result=20;   a=1;   b=3;   c=9;   d=27;
(--++)   Result=20;   a=1;   b=3;   c=9;   d=27;
(--+-)   Result=20;   a=1;   b=3;   c=9;   d=27;
(----)   Result=20;   a=1;   b=3;   c=9;   d=27;
--------------------------------------

这是一个有趣的思想实验。 如果有人有其他和/或更简单的解决方案,我期待着它。