写程序来解决一道小学数学题

默默学习编程一年,因故遇到一道小学数学题。心想:“然也,编程用武之地也!”于是博主便打开电脑狂撸一番,遂解决。拿来与同志们一乐。

题目描述如下:

如图,有带加减乘符号的十六个数,选出其中五个,进行运算,最后结果是一。选出五个后,,会先进行乘法,再进行加减。。。选出的第一个不是乘

这里写图片描述

代码如下:
static char[] operator=new char[16];//储存运算符
static int[] number=new int[16];//储存数字
static int[] selected=new int[5];//储存被选出来的数的下标

public static void main(String[] args) 
{


    for(int i=0;i<=15;i++)
    {
        if(operator[i]!='*')//保证第一个字符不是乘,题目要求
        {
            for(int j=0;j<=15;j++)
                for(int k=0;k<=15;k++)
                    for(int l=0;l<=15;l++)
                        for(int m=0;m<=15;m++)
                        {

                            selected[0]=i;//储存选出来的五个下标,用此下标即可在数据数组找到对应的数据
                            selected[1]=j;
                            selected[2]=k;
                            selected[3]=l;
                            selected[4]=m;
                            initialize();
                             int end=judge(selected);
                             boolean repetition=false;
                            if(end==1)
                            {
                                repetition=true;
                                //剔除选择了两个同样数的情况
                                for(int qq=1;qq<5;qq++)
                                {
                                    for(int ww=qq;ww>=0;ww--)
                                        if(selected[ww]==selected[qq])
                                            repetition=false;
                                }
                                for(int qq=0;qq<5;qq++)
                                {
                                    System.out.print(selected[qq]+1+" ");
                                }
                                System.out.println();
                            }


                        }
        }

    }

}
//将数组初始化,即将数据储存进数组
static public void initialize()
{
    operator[0]='+';
    operator[5]='+';
    operator[6]='+';
    operator[11]='+';
    operator[15]='+';
    operator[1]='-';
    operator[2]='-';
    operator[8]='-';
    operator[13]='-';
    operator[14]='-';
    operator[3]='*';
    operator[4]='*';
    operator[7]='*';
    operator[9]='*';
    operator[10]='*';
    operator[12]='*';
    number[0]=190;
    number[1]=87;
    number[2]=94;
    number[3]=7;
    number[4]=12;
    number[5]=29;
    number[6]=65;
    number[7]=8;
    number[8]=999;
    number[9]=9;
    number[10]=22;
    number[11]=19;
    number[12]=4;
    number[13]=576;
    number[14]=425;
    number[15]=117;

}

//此方法用来计算选出来的五个数的计算结果并返回这个结果

static public int judge(int[]a)
{
    //首先我们将所有的“*”消除
    for(int i=1;i<5;i++)
    {
        if(operator[a[i]]=='*')
        {
            int j=i+1;
            if(j<5)
            {
                while(operator[a[j]]=='*')
                {
                    j++;
                    if(j>=5)
                        break;
                }
            }
            j--;
            for(int k=i;k<=j;k++)
            {
                number[a[i-1]]=number[a[i-1]]*number[a[k]];
                number[a[k]]=0;
                operator[a[k]]='+';
            }

        }
    }
    int end=0;
    //对只含有加减运算的数进行计算
    for(int i=0;i<5;i++)
    {
        if(operator[a[i]]=='+')
            end+=number[a[i]];
        if(operator[a[i]]=='-')
            end-=number[a[i]];
    }
    return end;
}
`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值