程序员

亚马逊校园招聘在线笔试题(一)

2019-10-22  本文已影响0人  Sep_D_Dai

题目:给定一个数组和一个数字,请在这个数组的元素之间添加+-符号,使这个数组元素运算之后的结果是这个数字,比如{2,3,4}1 则2+3-4=1输出这样的等式

分析:这是亚马逊2013年在线笔试的一道题目,题目不难,应该使用递归来做
   若数组只有一个元素,则这个元素和最后数字相等,则输出(元素=数字),
   若和最后元素不相等,则不输出,返回
   否则,使用+和-两种符号递归当前数组的第一个元素

C++代码如下:

void print(int* a,char* b,int len,int sum){
    for(int i=0;i<len;i++){
        cout<<a[i]<<b[i];
    }
    cout<<sum<<endl;
}
void amx01(int* a,int start,int len,int sum,char *b,int l,int total){
    if(len==1){
        if(a[start]==sum){
            b[start-1]='+';
            b[start]='=';
            //输出b
            print(a,b,l,total);
        }
        else if(a[start]==-sum){
            b[start-1]='-';
            b[start]='=';
            print(a,b,l,total);
        }
        return;
    }
    b[start-1]='+';
    amx01(a,start+1,len-1,sum-a[start],b,l,total);
    b[start-1]='-';
    amx01(a,start+1,len-1,sum+a[start],b,l,total);

}
void amx(int* a,int len,int sum){
    if(len<=0){
        return;
    }
    if(len==1){
        if(a[0]==sum){
            cout<<a[0]<<"="<<sum<<endl;
        }
        return;
    }
    char b[len];
    amx01(a,1,len-1,sum-a[0],b,len,sum);
}
int main(){
 int a[5]={3,4,5,6};
 int sum = 10;
 amx(a,4,sum);
}
上一篇下一篇

猜你喜欢

热点阅读