您的位置:首页 > 其它

亚马逊在线技术笔试题

2018-03-30 14:01 344 查看
(1) * 题目:给定一个数组和一个数字,请在这个数组的元素之间添加+-符号,使这个数组元素运算之后的结果是这个数字, *     比如{2,3,4}1 则2+3-4=1输出这样的等式 *     分析:这是亚马逊2013年在线笔试的一道题目,题目不难,应该使用递归来做 *         若数组只有一个元素,则这个元素和最后数字相等,则输出(元素=数字), *         若和最后元素不相等,则不输出,返回 *         否则,使用+和-两种符号递归当前数组的第一个元素 */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);}(2) * 题目如下: * 每个大于1的数字都可以由其他数字相加组合而成,例如: * 5=1+4, 5=2+3; * 7=1+6, 7=2+5, 7=3+4; * 现要求输入正整数n(n<50),输出所有除n本身外正数相加的不重复组合 * 【例如】 * 输入: * 8 * 输出: * 8=1+2+5 * 8=1+3+4 * 8=1+7 * 8=2+6 * 8=3+5 * 分析:可以使用一个整形数组来记录,不断修改数组中的值达到目的 */
public class chaif {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
p(10);
}
static void print(int[] r,int len){
for(int i=0;i<=len;i++){
System.out.print(r[i]+" ");
//cout<<r[i]<<" ";
}
System.out.println();
}
public static void p(int n) {
int sum = 0, len = 0;
while (sum < n) {
sum += len;
len++;
}
System.out.println(len);
len--;
int r[]=new int[len];
for (int i = 0; i < len; i++) {
r[i] = i + 1;
}
int k = len - 2;
sum-=r[len-1];
while (true) {
if (k == 0 && r[k] == n) {
break;
}
if (sum < n) {
r[k + 1] = r[k] + 1;
k++;
sum += r[k];
} else {
if (sum == n) {
print(r, k);
}
sum -= r[k];
r[--k]++;
sum++;
}
}
}

}
(3)前序中序,求后序
public class Solution {
/** * @param args */   static int num; static int[] res=new int[7];   static int[] getPostOrderTraverse(int[] preOrder, int[] midOrder) {   
  boolean state= true;  if(preOrder.length!=midOrder.length){   state = false;  }  if(preOrder.length==midOrder.length){   for(int i=0;i<preOrder.length;i++){  for(int j=0;j<midOrder.length;j++){  if(preOrder[i]==midOrder[j]){  break;  }  state = false;  }   }  } //  return state;  if(midOrder.length==1){   System.out.print(midOrder[0]+"s");
 res[num++]=midOrder[0];  return res;  } //  char x = sa.charAt(0);  int x=preOrder[0];  int mid;  for(int j=0;j<midOrder.length;j++){  if(x==midOrder[j]){ mid=j; int[] c=new int[mid];int cl=0; int[] d=new int[midOrder.length-mid-1];int dl=0; for(int k=0;k<midOrder.length;k++){ if(k<mid){ c[cl]=midOrder[k];cl++; } else if(k>mid){ d[dl]=midOrder[k];dl++;  } } int[] e=new int[c.length];int el=0; int[] f=new int[midOrder.length-mid];int fl=0; for(int k=1;k<midOrder.length;k++){ if(k<=mid){ e[el]=preOrder[k];el++; } else if(k>mid){ f[fl]=preOrder[k];fl++;  } } getPostOrderTraverse(e,c); getPostOrderTraverse(f,d); res[num++]=x; System.out.println(x+"d");  }  }
 return res;
   } public static void main(String[] args) { // TODO Auto-generated method stub       int[]a={1,3,8,2,6,4,5};       int[]b={8,3,2,1,5,4,6};              int[]c=getPostOrderTraverse(a,b);      for(int i=0;i<c.length;i++){      System.out.print(c[i]);       }      
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔试题 亚马逊 算法