QUESTION
The cost of a stock on each day is given in an array, find the max profit that you can make by buying and selling in those days. \n\nInput:\nFirst line contains number of test cases T. Each test case contain the integer value \”N\” denoting days followed by an array of stock prices in N days.\nOutput:\nThe maximum profit is displayed as shown below. And if there is no profit then print \”\”No Profit\”\”.\n\n\nConstraints:\n1 <=T<=100\n2 <=N<=100\n1 <=arr[i]<=10000.
“TESTCASE_1”: “2\n7\n100 180 260 310 40 535 695\n10\n23 13 25 29 33 19 34 45 65 67\n###—###SEPERATOR—###—\n(0 3) (4 6)\n(1 4) (5 9)”, “TESTCASE_2”: “2\n5\n10 80 60 30 40\n10\n2 1 5 9 3 8 4 5 6 7\n###—###SEPERATOR—###—\n(0 1) (3 4)\n(1 3) (4 5) (6 9)”, “TESTCASE_3”: “4\n7\n100 180 260 310 40 535 695\n10\n23 13 25 29 33 19 34 45 65 67\n5\n10 80 60 30 40\n10\n2 1 5 9 3 8 4 5 6 7\n###—###SEPERATOR—###—\n(0 3) (4 6)\n(1 4) (5 9)\n(0 1) (3 4)\n(1 3) (4 5) (6 9)”, “TESTCASE_4”: “0\n###—###SEPERATOR—###—\n0”, “TESTCASE_5”: “0\n###—###SEPERATOR—###—\n0
ANSWER
#include <stdio.h>
#include<stdlib.h>
int main(){
int testcases, array_size,i,j,*arr,*test_results;
//get Testcases
scanf("%d",&testcases);
test_results = (int*)malloc(testcases*sizeof(int));
if(!test_results)
return -1;
for(j=0; j<testcases;j++){
int sum=0,max_sum=0;
//get array size
scanf("%d",&array_size);
arr = (int*)malloc(array_size*sizeof(int));
if(!arr)
return -1;
//populate input array
for(i=0;i<array_size;i++){
scanf("%d",&arr[i]);
}
int buy_prefix=0; int sell_prefix=0;
int bought = 0;int sold =0;
for(i=0;i<array_size;i++){
if((i+1<array_size) && (arr[i] < arr[i+1])){
continue;
} else if((i+1<array_size) && (arr[i] > arr[i+1])){
if(i!=buy_prefix){
sell_prefix = i;
printf("(%d %d) ",buy_prefix,sell_prefix);
sold=1;
}
buy_prefix = i+1;
}
}
if(i-1>buy_prefix){
sell_prefix=i-1;
sold=1;
printf("(%d %d)",buy_prefix,sell_prefix);
}
if(sold==0){
printf("No Profit");
}
if(arr)
free(arr);
printf("\n");
}
return 0;
}