钢条切割
这道题只是我刚开始学习线性规划的自己的根据大致做法自己写的代码。作为笔记记录一下,未必是简便的程序。
//贪心算法-----钢条切割
#include<stdio.h>
typedef struct pole{
float lenght;
float price;
float per;
}Pole;
int main(){
int i,j,k,n,m,sum=0;
Pole temp;
Pole array[10]={{1,1},{2,5},{3,8},{4,9},{5,10},{6,17},{7,17},{8,20},{9,24},{10,30}};
for(i=0;i<10;i++){
array[i].per=array[i].price/array[i].lenght;
}
//排序
for(i=0;i<10-1;i++){
k=i;
for(j=1+i;j<10;j++)
if(array[k].per<array[j].per) k=j;
if(k!=i) {
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
printf("请输入将要切割钢条的长度:");
scanf("%d",&n);
printf("最优切割方式为:",sum);
for(i=0;i<10;i++){
if(array[i].lenght<=n){
m=n/array[i].lenght;
n=n-m*array[i].lenght;
//n=n%(int)array[i].lenght;
sum=sum+m*array[i].price;
printf("%d个%d ",m,(int)array[i].lenght);
}
if(n==0) break;
}
printf("\n最高利润为:sum=%d",sum);
return 0;
}