亚马逊校园招聘在线笔试题(一)
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);
}