Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<climits>
  4. using namespace std;
  5. int N, plusNum, minusNum, multiNum, divNum, operands[11];
  6. int operatorsNum, AnswerMax, AnswerMin;
  7. char operators[10];
  8.  
  9. void init() {
  10. scanf("%d", &N);
  11. for (int i = 0; i < N; i++)
  12. scanf("%d", &operands[i]);
  13. scanf("%d %d %d %d", &plusNum, &minusNum, &multiNum, &divNum);
  14. for (int i = 0; i < plusNum; i++)
  15. operators[operatorsNum++] = '+';
  16. for (int i = 0; i < minusNum; i++)
  17. operators[operatorsNum++] = '-';
  18. for (int i = 0; i < multiNum; i++)
  19. operators[operatorsNum++] = '*';
  20. for (int i = 0; i < divNum; i++)
  21. operators[operatorsNum++] = '/';
  22. AnswerMax = INT_MIN;
  23. AnswerMin = INT_MAX;
  24. }
  25.  
  26. int calc(int a, int b, char op) {
  27. int ret = 0;
  28. switch (op) {
  29. case '+':
  30. ret = a + b;
  31. break;
  32. case '-':
  33. ret = a - b;
  34. break;
  35. case '*':
  36. ret = a * b;
  37. break;
  38. case '/':
  39. ret = a / b;
  40. break;
  41. }
  42. return ret;
  43. }
  44.  
  45. void dfs(int result, int operandIdx) {
  46. int nextResult = 0;
  47. if (operandIdx == operatorsNum) {
  48. if (AnswerMax < result)
  49. AnswerMax = result;
  50. if (AnswerMin > result)
  51. AnswerMin = result;
  52. return;
  53. }
  54. nextResult = calc(result, operands[operandIdx+1], operators[operandIdx]);
  55. dfs(nextResult, operandIdx + 1);
  56. }
  57.  
  58. void perm(int n, int k) {
  59. if (k == n) {
  60. dfs(operands[0], 0);
  61. return;
  62. }
  63.  
  64. for (int i = k; i < n; i++) {
  65. swap(operators[i], operators[k]);
  66. perm(operatorsNum, k + 1);
  67. swap(operators[i], operators[k]);
  68. }
  69. }
  70.  
  71. int main() {
  72. init();
  73. perm(operatorsNum,0);
  74. printf("%d\n%d\n", AnswerMax, AnswerMin);
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement