| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2864 人关注过本帖, 4 人收藏
标题:TC代码与VC的不同之处,自我总结
取消只看楼主 加入收藏
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个TC的奖金发放问题,代码如下
程序代码:
/*企业发放的奖金根据利润提成,发放规则如下:
  利润(I)低于或等于10万元时,奖金可提10%;
  利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
  20万到40万之间时,高于20万元的部分,可提成5%;
  40万到60万之间时高于40万元的部分,可提成3%;
  60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成。
  从键盘输入当月利润I,求应发放奖金总数?*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
    long int gain;
    int prize1,prize2,prize4,prize6,prize10,prize = 0;
    puts("*************************************");
    puts("*      The program will solve       *");
    puts("* the problem of prize distribution *");
    puts("*************************************");
    puts("please input the num of gain:");
    scanf("%ld",&gain);
    prize1=100000*0.1;
    prize2=prize1+100000*0.075;
    prize4=prize2+200000*0.05;
    prize6=prize4+200000*0.03;
    prize10=prize6+400000*0.015;
    if(gain<=100000)
      prize=gain*0.1;
    else if(gain<=200000)
           prize=prize1+(gain-100000)*0.075;
         else if(gain<=400000)
            prize=prize2+(gain-200000)*0.05;
          else if(gain<=600000)
             prize=prize4+(gain-400000)*0.03;
               else if(gain<=1000000)
                  prize=prize6+(gain-600000)*0.015;
                else
                  prize=prize10+(gain-1000000)*0.01;
    printf("The prize is :%d\n",prize);
    getch();
    return 0;
}


在VC中虽然警告很多但错误只有一处。代码如下
程序代码:
/*企业发放的奖金根据利润提成,发放规则如下:
  利润(I)低于或等于10万元时,奖金可提10%;
  利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
  20万到40万之间时,高于20万元的部分,可提成5%;
  40万到60万之间时高于40万元的部分,可提成3%;
  60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成。
  从键盘输入当月利润I,求应发放奖金总数?*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
    long int gain;
    int prize1,prize2,prize4,prize6,prize10,prize = 0;
    puts("*************************************");
    puts("*      The program will solve       *");
    puts("* the problem of prize distribution *");
    puts("*************************************");
    puts("please input the num of gain:");
    scanf("%ld",&gain);
    prize1=100000*0.1;
    prize2=prize1+100000*0.075;
    prize4=prize2+200000*0.05;
    prize6=prize4+200000*0.03;
    prize10=prize6+400000*0.015;
    if(gain<=100000)
      prize=gain*0.1;
    else if(gain<=200000)
           prize=prize1+(gain-100000)*0.075;
         else if(gain<=400000)
            prize=prize2+(gain-200000)*0.05;
          else if(gain<=600000)
             prize=prize4+(gain-400000)*0.03;
               else if(gain<=1000000)
                  prize=prize6+(gain-600000)*0.015;
                else
                  prize=prize10+(gain-1000000)*0.01;
    printf("The prize is :%d\n",prize);
    getch();
    return 0;
}

测试通过





2010-07-03 18:08
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个背包问题,TC代码如下:
程序代码:
#include<stdio.h>
#define NUM 10/* 定义物品总数*/
#define CONTENT 10 /*定义包的容量*/
void knapsack(int v[NUM],int w[NUM],int c,int m[NUM ][CONTENT])
{
    int n=NUM-1;
    int i,j;
    int jMax;
    if((w[n]-1)< c)
    jMax = w[n]-1;
    else
    jMax = c;
    /* 初始化m[n][j] */
    for(j = 0; j <= jMax; j++)
    m[n][j] = 0;
    for(j = jMax +1; j <= c; j++)
    m[n][j] = v[n];
   /*使用非递归的算法来求解m[i][j] */
   for(i = n-1; i > 0; i--)
   {
        if((w[i]-1)< c)
        jMax = w[i]-1;
        else
        jMax = c;
        for(j = 0; j <= jMax; j++)
        m[i][j] = m[i+1][j] ;
        for(j = jMax +1; j <= c; j++)
        {
            if(m[i+1][j] >= (m[i+1][j-w[i]]+v[i]))
            m[i][j] = m[i+1][j] ;
        else
        m[i][j] =     m[i+1][j-w[i]]+v[i];
    }
   }
   if(c>w[0])
   {
       if(m[1][c] >= (m[1][c-w[0]]+v[0]))
            m[0][c]= m[1][c];
       else
        m[0][c]= m[1][c-w[0]]+v[0];
   }
   else
       m[0][c]= m[1][c];
  
}
/*寻找最优解*/
void traceback(int flag[NUM],int w[NUM],int m[NUM][CONTENT])
{
    int n = NUM -1;
    int i;
    int c = CONTENT;
    for(i = 0; i < n; i++)
    {
        if(m[i][c] == m[i+1][c])
            flag[i] = 0;
        else
        {
            flag[i] = 1;
            c-=w[i];
        }
    }
    if(m[n][c] >0)
        flag[n] = 1;
    else
        flag[n] = 0;
}
/* 打印最优解*/
void printResult(int flag[NUM],int w[NUM],int v[NUM],int m[NUM][CONTENT])
{
    int i;
    printf("the knapsack should contain:\n");
    printf(" num weight value \n");
    for(i = 0;i < NUM; i++)
    {
        if(flag[i] == 1)
                printf("  %d    %d     %d\n",i,w[i],v[i]);
    }
    printf("the max value in the knapsack is: %d\n",m[0][CONTENT]);
}
int main()
{
    int value[NUM]={5,2,3,4,3,6,5,7,8,2};
    int weight[NUM]={2,1,3,2,4,3,5,6,2,2};
    int c = CONTENT;
    int maxvalue[NUM][CONTENT];
    int flag[NUM]={0,0,0,0,0,0,0,0,0,0};
    clrscr();
    printf("****************************************\n");
        printf("*      this program will solve         *\n");
        printf("*    the problem of 0-1knapsack        *\n");
        printf("****************************************\n");
    /*计算最优值*/
    knapsack(value,weight,c,maxvalue);
    /*构造最优解*/
    traceback(flag,weight,maxvalue);
    /*打印程序的结果*/
    printResult(flag,weight,value,maxvalue);
    getch();
    return 0;  
}


在VC中代码如下:

程序代码:
#include<stdio.h>
#include<conio.h>
#include <process.h>
#define NUM 10/* 定义物品总数*/
#define CONTENT 10 /*定义包的容量*/
void knapsack(int v[NUM],int w[NUM],int c,int m[NUM ][CONTENT])
{
    int n=NUM-1;
    int i,j;
    int jMax;
    if((w[n]-1)< c)
    jMax = w[n]-1;
    else
    jMax = c;
    /* 初始化m[n][j] */
    for(j = 0; j <= jMax; j++)
    m[n][j] = 0;
    for(j = jMax +1; j <= c; j++)
    m[n][j] = v[n];
   /*使用非递归的算法来求解m[i][j] */
   for(i = n-1; i > 0; i--)
   {
        if((w[i]-1)< c)
        jMax = w[i]-1;
        else
        jMax = c;
        for(j = 0; j <= jMax; j++)
        m[i][j] = m[i+1][j] ;
        for(j = jMax +1; j <= c; j++)
        {
            if(m[i+1][j] >= (m[i+1][j-w[i]]+v[i]))
            m[i][j] = m[i+1][j] ;
        else
        m[i][j] =     m[i+1][j-w[i]]+v[i];
    }
   }
   if(c>w[0])
   {
       if(m[1][c] >= (m[1][c-w[0]]+v[0]))
            m[0][c]= m[1][c];
       else
        m[0][c]= m[1][c-w[0]]+v[0];
   }
   else
       m[0][c]= m[1][c];
  
}
/*寻找最优解*/
void traceback(int flag[NUM],int w[NUM],int m[NUM][CONTENT])
{
    int n = NUM -1;
    int i;
    int c = CONTENT;
    for(i = 0; i < n; i++)
    {
        if(m[i][c] == m[i+1][c])
            flag[i] = 0;
        else
        {
            flag[i] = 1;
            c-=w[i];
        }
    }
    if(m[n][c] >0)
        flag[n] = 1;
    else
        flag[n] = 0;
}
/* 打印最优解*/
void printResult(int flag[NUM],int w[NUM],int v[NUM],int m[NUM][CONTENT])
{
    int i;
    printf("the knapsack should contain:\n");
    printf(" num weight value \n");
    for(i = 0;i < NUM; i++)
    {
        if(flag[i] == 1)
                printf("  %d    %d     %d\n",i,w[i],v[i]);
    }
    printf("the max value in the knapsack is: %d\n",m[0][CONTENT]);
}
int main()
{
    int value[NUM]={5,2,3,4,3,6,5,7,8,2};
    int weight[NUM]={2,1,3,2,4,3,5,6,2,2};
    int c = CONTENT;
    int maxvalue[NUM][CONTENT];
    int flag[NUM]={0,0,0,0,0,0,0,0,0,0};
    system("cls");
    printf("****************************************\n");
        printf("*      this program will solve         *\n");
        printf("*    the problem of 0-1knapsack        *\n");
        printf("****************************************\n");
    /*计算最优值*/
    knapsack(value,weight,c,maxvalue);
    /*构造最优解*/
    traceback(flag,weight,maxvalue);
    /*打印程序的结果*/
    printResult(flag,weight,value,maxvalue);
    getch();
    return 0;  
}


2010-07-03 18:22
快速回复:TC代码与VC的不同之处,自我总结
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017494 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved