Predict the output of the following codes. There are different versions of the code (C/C++/Java/Python). The codes are also saved here. Answer: [5 10 2 1 5 1 2 10]
C
int* performOps(int *A, int len, int *blen) { int i; *blen = len * 2; int *B = (int *)malloc((*blen) * sizeof(int)); for (i = 0; i < len; i++) { B[i] = A[i]; B[i + len] = A[(len - i) % len]; } return B; } int main() { const int len = 4; /********** Generate A **********/ int A[] = {5, 10, 2, 1}; /********** End of Gen **********/ // A = {5, 10, 2, 1}; int blen; int *B = performOps(A, len, &blen); int i; for (i = 0; i < blen; i++) printf("%d ", B[i]); }
C++
vector<int> performOps(vector<int> A) { vector<int> B(2 * A.size(), 0); for (int i = 0; i < A.size(); i++) { B[i] = A[i]; B[i + A.size()] = A[(A.size() - i) % A.size()]; } return B; } int main() { vector<int> A = {5,10,2,1}; vector<int> B = performOps(A); for (int i = 0; i < B.size(); i++) cout<<B[i]<<" "; }
Java
public class predict_array { public static ArrayList<Integer> performOps(ArrayList<Integer> A) { ArrayList<Integer> B = new ArrayList<Integer>(); for (int i = 0; i < 2 * A.size(); i++) B.add(0); for (int i = 0; i < A.size(); i++) { B.set(i, A.get(i)); B.set(i + A.size(), A.get((A.size() - i) % A.size())); } return B; } public static void main(String[] args) { /********** Generate A **********/ ArrayList<Integer> A = new ArrayList<>(Arrays.asList(5,10,2,1)); /********** End of Gen **********/ // A = {5,10,2,1} ArrayList<Integer> B = performOps(A); for (int i = 0; i < B.size(); i++) System.out.print(B.get(i) + " "); } };
Python
def performOps(A): blen = 2 * len(A) B = [0]*blen for i in xrange(len(A)): B[i] = A[i] B[i + len(A)] = A[(len(A) - i) % len(A)] return B if __name__ == '__main__': A = [5, 10, 2, 1] B = performOps(A) for i in xrange(len(B)): print B[i],