我是刚学C不久,以前用VB,至于C只会简单的程序实现,还不懂得怎样提高程序的通用性,在效率上也差很多.比如N!那题,我是在C++板块见到的,也写了一个,可是没人理会,几位板主的代码我根本看不懂.
这个程序我完成了,只是简单的算出了结果,至于其它的我就不会了,包括验证我只会用计算器一下一下的按.
代码如下,在WIN-TC下写的:
/*////////////////////////////////////////////////////////////*/
#include<stdio.h>
#include<string.h>
int main()
{
int v,k,array[1000];
int i,j,max,sum=0,reslen=0,res[500];
FILE *fp;char filename[20];
clrscr();
printf("\nInput filename:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("\nCannot open file.\n");
exit(1);
}
/*读入数据*/
fscanf(fp,"%d%d",&v,&k);
for(i=0;i<k;++i)
fscanf(fp,"%d",&array[i]);
fclose(fp);
/*输出读入的数据*/
printf("v=%d\tk=%d\n\nSorted:",v,k);
/*对K个物品进行排序(选择法)并输出*/
for(i=0;i<k-1;++i)
{
max=i;
for(j=i+1;j<k;++j)
if(array[max]<array[j])max=j;
if(max!=i)
{
array[max]+=array[i];
array[i]=array[max]-array[i];
array[max]=array[max]-array[i];
}
}
for(i=0;i<k;++i)
printf("%6d",array[i]);
printf("\n");
/*算法核心代码*/
for(i=0;i<k-1;++i)
{
if(array[i]>v)
continue;
else
sum=array[i];
for(j=i+1;j<k;++j)
{
sum+=array[j];
if(sum>v)
{
sum-=array[j];
continue;
}
}
res[reslen]=sum;
++reslen;
/*sum=0;*/
}
for(i=0;i<reslen;++i)
j=j<res[i]?res[i]:j;
printf("\nThe max is:%d",j);
getch();
}
/*////////////////////////////////////////////////////////*/
我用的方法是先将K个物品按体积降序排列,从第一数开始与后面的数相加,超过V就加下一个数,循环一次后将结果存入数组,再从第二个数开始试,直到循环结束.最后从数组中选择最大的数输出.
错了别笑我,我可以改的...
[此贴子已经被作者于2005-11-3 20:10:24编辑过]