• 一道ITAT的题(C语言实现)


    不知道ITAT是什么东西,做了一道它的编程题,简单的递归实现。

    题目如下:

    //************************************************************

    1、    某企业在未来的12个月要研究一种新产品,新产品的研制需要四个阶段,每个阶段都可用慢、正常、快等三种速度进行,时间和成本如下表所列。

    理论研究

    试验阶段

    政府批准

    销售

    5/5

    3/6

    6/1

    5/8

    正常

    4/7

    2/8

    4/1

    4/10

    2/10

    1/12

    2/3

    3/15

    说明:单位(月/万元),时间按月,成本按万元为单位。

    例如:5/5代表5个月,5万元;4/7代表4个月,7万元。

    该企业准备在12个月内花费最少的费用就可以有新产品。

    //*******************************************************************

    实现如下:

    View Code
     1 /*
    2 * Fredric 2012-3-27
    3 * 第四届ITAT竞赛试题
    4 */
    5 #include <stdio.h>
    6 #include <stdlib.h>
    7
    8 typedef enum E_PROCESS{
    9 E_FAST,
    10 E_MIDDLE,
    11 E_LOW,
    12 E_NONE,
    13 };
    14
    15 typedef struct tagCost{
    16 int month;
    17 int price;
    18 }stCost;
    19
    20 stCost gStatus1[E_NONE] = {{2,10},{4,7}, {5,5}};//理论研究阶段
    21 stCost gStatus2[E_NONE] = {{1,12},{2,8}, {3,6}};//实验阶段
    22 stCost gStatus3[E_NONE] = {{2,3}, {4,2}, {6,1}};//政府批准
    23 stCost gStatus4[E_NONE] = {{3,15},{4,10},{5,8}};//销售
    24
    25 stCost* gStatus[4] = {gStatus1, gStatus2, gStatus3, gStatus4};
    26
    27 E_PROCESS eTempRes[4]; //临时解
    28 E_PROCESS eFinalRes[4];//最终解
    29
    30 int limitMonth = 12; //12个月内
    31 int leastCost = 10000;//最小费用
    32
    33 void initTemp(){
    34 for (int i = 0; i < 4; i++)
    35 {
    36 eTempRes[i] = E_NONE;
    37 }
    38 }
    39
    40 void search(int status, int month, int price){
    41 int curPrice = 0;
    42
    43 for (int i = E_FAST; i < E_NONE; i++)
    44 {
    45 if ((gStatus[status] + i)->month + month < limitMonth)
    46 {
    47 eTempRes[status] = (E_PROCESS)i;
    48 curPrice = price + (gStatus[status] + i)->price;
    49 if (3 > status)
    50 {
    51 search(status + 1, month + (gStatus[status] + i)->month, curPrice);
    52 }else{
    53 if (curPrice < leastCost)
    54 {
    55 leastCost = curPrice;
    56 for (i = 0; i < 4; i++)
    57 {
    58 eFinalRes[i] = eTempRes[i];
    59 }
    60 }
    61 }
    62 }
    63 }
    64
    65 return;
    66 }
    67
    68 void main(void)
    69 {
    70 search(0, 0, 0);
    71
    72 int totalvalue = 0;
    73 int totalmonth = 0;
    74
    75 for(int i = 0; i < 4; i++){
    76 totalvalue += (gStatus[i] + eFinalRes[i])->price;
    77 totalmonth += (gStatus[i] + eFinalRes[i])->month;
    78 printf("Status No,%d is %d\r\n", i, eFinalRes[i]);
    79 }
    80
    81 printf("For %d Month, the Least Cost is %d\r\n",totalmonth, totalvalue);
    82
    83 return;
    84 }



  • 相关阅读:
    PHP设计模式:简单工厂
    MySQL实现两张表数据的同步
    SSH中Action的单例与多例
    Java日期时间操作的一些方法
    Null value was assigned to a property of primitive type setter of
    Android Studio创建AVD
    一台主机上安装多个Tomcat
    Tomcat指定的服务已存在
    Unsupported major.minor version 52.0问题的解决
    修改MySQL自动递增值
  • 原文地址:https://www.cnblogs.com/fredric/p/2420238.html
Copyright © 2020-2023  润新知