最少费用购物.cpp
上传用户:market520
上传日期:2022-01-29
资源大小:1k
文件大小:3k
源码类别:

百货/超市行业

开发平台:

C/C++

  1. // 设计题:
  2. // 学号:
  3. // 姓名:ustc
  4. // 第 3-17 题
  5. /*
  6. InPut(优惠前) InPut(优惠后) OutPut
  7. 2 2 14
  8. 7 3 2 1 7 3 5 
  9. 8 2 5 2 7 1 8 2 10 
  10. */
  11. #include<iostream>
  12. #include<stdio.h>
  13. using namespace std;
  14. int b,s; //所购商品种类数b;有s种优惠商品组合
  15. int product[6], num[100], offer[100][100], cost[7][7][7][7][7];
  16. struct elem
  17. {
  18. int piece; //购买该商品的总数
  19. int price; //购买该种商品的正常单价
  20. }purch [100]; //b所购商品的种类数
  21. void minicost()
  22. {
  23. int i, j, k, m, n, p, minm;
  24. minm = 0;
  25. for(i=1; i<=b; i++)
  26. minm += product[i] * purch[i].price;
  27. for(p=1; p<=s; p++)
  28. {
  29. i = product[1] - offer[p][1];
  30. j = product[2] - offer[p][2];
  31. k = product[3] - offer[p][3];
  32. m = product[4] - offer[p][4];
  33. n = product[5] - offer[p][5];
  34. if(i>=0 && j>=0 && k>=0 && m>=0 && n>=0 && (cost[i][j][k][m][n]+offer[p][0]<minm))
  35. minm = cost[i][j][k][m][n]+offer[p][0];
  36. }
  37. cost[product[1]][product[2]][product[3]][product[4]][product[5]] = minm;
  38. }
  39. //其中,product[i]是购买第i种商品的数量,由comp迭代计算,init进行初始化计算。
  40. void comp(int i)
  41. {
  42. if(i>b) { minicost(); return;}
  43. for(int j=0; j<=purch[i].piece; j++) 
  44. {product[i] = j; comp(i+1);}
  45. }
  46. void init()
  47. {
  48. int i, j, n, p, t, code;
  49. for(i=0; i<100; i++)
  50. for(j=0; j<6; j++)
  51. offer[i][j] = 0;
  52. for(i=0; i<6; i++) 
  53. purch[i].piece = 0; 
  54. purch[i].price = 0; 
  55. product[i] = 0; 
  56. }
  57. cout << "n*************************优惠前*************************n";
  58. cout << "请输入所购商品种类数:n";
  59. cin >> b; //初始化所购商品种类数
  60. for(i=1; i<=b; i++)
  61. {
  62. cout << "第" << i << "种商品的编码、购买数量、正常单价分别为(用空格分开)n";
  63. cin >> code; //商品的编码
  64. cin >> purch[i].piece >> purch[i].price; //购买该商品的总数和该种商品的正常单价
  65. num[code] = i;
  66. }
  67. cout << "n*************************优惠后*************************n";
  68. cout << "请输入优惠商品组合数(优惠方案数):n";
  69. cin >> s;  //共有s种优惠商品组合
  70. for(i=1; i<=s; i++)
  71. {
  72. cout << "第" << i << "个优惠方案中商品的种类数为n";
  73. cin >> t; //t是优惠商品组合中商品的种类数
  74. for(j=1; j<=t; j++)
  75. {
  76. cout << "第" << i << "个优惠方案中第" << j << "种商品的编码、数量分别为(用空格分开)n";
  77. cin >> n >> p; //编码和数量
  78. offer[i][num[n]] = p;
  79. }
  80. cout << "第" << i << "个优惠方案的价格是:";
  81. cin >> offer[i][0]; //第i种优惠方案的价格
  82. }
  83. }
  84. //实现算法的主函数如下;
  85. int main()
  86. {
  87. init();
  88. comp(1);
  89. cout << "n****************所购商品应付的最少费用为****************n";
  90. cout << cost[product[1]][product[2]][product[3]][product[4]][product[5]] << endl;
  91. return 0;
  92. }