编辑代码

#include "stdio.h"

 void main
 {
    printf("************贪处算法解决背包问题****************\n "); //标题
    float m , w[100], p[1000], p1[1000], s , pp =0; //设置变量 
    int n , i, j, b[50], max;
    printf ("     请输入物品的个数及背包的总容量\n"); //提示用户输入物品的相
    printf("物品的总个数:");
    scanf ("% d ",& n );
    printf( "背包的总容量:");
    scanf ("% f ",& m );
    for (i=1, s=0; i <= n; i ++)//算出物品的总重量 s 
    {
        printf ("物品的编号:% d\n 重量:",i); 
        scanf ("% f ",& w[i]);
        printf ("价值:"); 
        scanf ("% f ",& p[i]);
        p1[i] = p[i];
        s = s + w[i];
        if ( s <= m ) //物品的总重量如果小于 m,则全装入
        {
            for (i=1; i <= n ; i ++) 
            {
                pp += p[i];
            }
            printf ("选择的结果是:物品的总重量小于背包的容量故全装入背包,得到的总利润是:% f\n ",pp );
            return0;
        }
    }
    printf ("选择的结果是: n ");//当物品的总重量大于 m 时的情况 
    for (i=1; i <= n ; i ++)
    {
        max = l ; 
        for ( j =2; j <= n;j ++)
        {
            if (p1[j] /w[j] > pl[max] /w[max])//比较物品的单位价值
            {
                max=j;
            }
            p1[max]=0;  //标记已经排了序的物品
            b[i]= max;
        }
    }
    for ( i =1, s=0; s < m && i<= n ; i ++)
    {
        s= s + w [b[i]];
        float wl = w [b[i-1]];
        if (s!= m)  //超出背包容量
        { 
            w [b[i-1]]= m -( s - w[b[i-1]]);  //装入第 b [i-1]个物品的重量
            p[b[i-1]]= w[b[i-1]]/ w1 * p [b[i-1]];  //装入第 b [i-1]个物品的价值
        }
        for(j =1;j<=1;j++) //输出选取的结果
        {
            printf ("物品的编号:% d ,可装入该物品的重量:% f \n ", b[j], w[b[j]]);
            pp += p[b[j]];
        }
    } 
    printf("总价值%f\n",pp); //装入背包的物品的总价值
 }