恼人的输出

程序媛媛啊 2013-05-06 08:39:59

这是用贪心法求背包问题,麻烦运行一下,会输出的全是地址符,不是数组元素,为什么啊

#include<iostream>
using namespace std;


void lowsort(int *ww,int n)
{
int index;
int temp;
for(int j=0;j<n;j++)
{
index=j;
for(int k=j+1;k<n;k++)

if(ww[k]>index)
{
index=k;
}

if(index!=j)
{
temp=ww[index];
ww[index]=ww[j];
ww[j]=temp;
}
}

}



void BiLi(int *w,int *v,int n,int ww[])
{
for(int i=0;i<n;i++)
{
ww[i]=v[i]/ww[i];
}
lowsort(ww,n);
}
int nap(int *w,int *v,int *x,int n,int C)
{
int sum=0;
int *ww=new int [n];
for(int i=0;i<n;i++)
x[i]=0;
BiLi(w,v,n,ww);
int j=0;
while(w[j]<C)
{
C=C-w[j];
x[j]=1;
sum=sum+v[j];
j++;
}

x[j]=C/w[j];
sum=sum+ww[j]*v[j];
return sum;
}

void main()
{
int C;
cout<<"背包容量为"<<endl;

cin>>C;
int n;
cout<<"物品个数为"<<endl;
cin>>n;
int *p=new int [n];
int *q=new int[n];
int *x=new int [n];
cout<<"物重"<<endl;
for(int i=0;i<n;i++)
{
cin>>p[i];

}
cout<<"物品价值"<<endl;
for(int j=0;j<n;j++)
{
cin>>q[i];
}
cout<<"输出最大总价值"<<endl;
cout<< nap(p,q,x,n,C);
cout<<"输出装入的物品"<<endl;
for(int k=0;k<n;k++)
{
cout<<x[i]<<" ";
}
}

...全文
202 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liupanmin123456789 2013-05-08
  • 打赏
  • 举报
回复
#include<iostream> using namespace std; void lowsort(float *ww,float*w,float *v,int n) { int index; int temp; for(int j=0;j<n;j++) { index=j; for(int k=j+1;k<n;k++) if(ww[k]>ww[index]) { index=k; } if(index!=j) { temp=ww[index]; ww[index]=ww[j]; ww[j]=temp; temp=w[j]; w[j]=w[index]; w[index]=temp; temp=v[j]; v[j]=v[index]; v[index]=temp; } } } void BiLi(float *w,float *v,int n,float ww[]) { for(int i=0;i<n;i++) { ww[i]=v[i]/w[i];应是w[i]; } lowsort(ww,w,v,n); } float nap(float *w,float *v,float *x,int n,float C) { float sum=0.0; float *ww=new float [n]; for(int i=0;i<n;i++) x[i]=0; BiLi(w,v,n,ww); int j=0; while(w[j]<=C) { C=C-w[j]; x[j]=1; sum=sum+v[j]; j++; } x[j]=C/w[j]; sum=sum+v[j]*x[j]; return sum; delete[]ww; } void main() { float C; cout<<"背包容量为"<<endl; cin>>C; int n; cout<<"物品个数为"<<endl; cin>>n; float *p=new float [n]; float *q=new float[n]; float *x=new float [n]; cout<<"物重"<<endl; for(int i=0;i<n;i++) { cin>>p[i]; } cout<<"物品价值"<<endl; for(int j=0;j<n;j++) { cin>>q[j]; } cout<<"输出最大总价值"<<endl; cout<< nap(p,q,x,n,C); cout<<"输出装入的物品"<<endl; for(int k=0;k<n;k++) { cout<<x[k]<<" ";//k; } delete[]p; delete[]q; delete[]x; }
hugett 2013-05-07
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

void lowsort(int *ww,int n)
{
	int index;
	int temp;
	for(int j=0;j<n;j++)
	{
		index=j;
		for(int k=j+1;k<n;k++){
			if(ww[k]>index)
			{
				index=k;
			}
		}
		if(index!=j)
		{
			temp=ww[index];
			ww[index]=ww[j];
			ww[j]=temp;
		}
	}
}

void  BiLi(int *w,int *v,int n,int ww[])
{
	for(int i=0;i<n;i++)
	{
		ww[i]=v[i]/ww[i];
	}
	lowsort(ww,n);
}

int nap(int *w,int *v,int *x,int n,int C)
{
	int sum=0;
	int *ww=new int [n];
	for(int i=0;i<n;i++) x[i]=0;
	BiLi(w,v,n,ww);//这里的排序应该不对吧。。你只是把ww排了序,而w,v并没有跟着一起排序。。这样w,v跟ww的序号会对不上的。。
	int j=0;
	while(w[j]<=C)//这里应该是<=吧。。
	{
		C=C-w[j];
		x[j]=1;
		sum=sum+v[j];
		j++;
	}
	x[j]=C/w[j];
	sum=sum+ww[j]*v[j];
	return sum;
}

void main()
{
	int C;
	cout<<"背包容量为"<<endl;
	cin>>C;
	int n;
	cout<<"物品个数为"<<endl;
	cin>>n;
	int *p=new int [n];
	int *q=new int[n];
	int *x=new int [n];
	cout<<"物重"<<endl;
	for(int i=0;i<n;i++)
	{
		cin>>p[i];
	}
	cout<<"物品价值"<<endl;
	for(int j=0;j<n;j++)
	{
		cin>>q[j];//i改为j
	}
	cout<<"输出最大总价值"<<endl;
	cout<< nap(p,q,x,n,C)<<endl;
	cout<<"输出装入的物品"<<endl;
	for(int k=0;k<n;k++)
	{
		cout<<x[k]<<" ";//i改为k
	}
	cout<<endl;
}
折翼断JJ 2013-05-06
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;


void lowsort(int *ww,int n)
{
int index;
int temp;
for(int j=0;j<n;j++)
{
index=j;
for(int k=j+1;k<n;k++)

if(ww[k]>index)
{
index=k;
}

if(index!=j)
{
temp=ww[index];
ww[index]=ww[j];
ww[j]=temp;
}
}

}



void  BiLi(int *w,int *v,int n,int ww[])
{
for(int i=0;i<n;i++)
{
ww[i]=v[i]/ww[i];
}
lowsort(ww,n);
}
int nap(int *w,int *v,int *x,int n,int C)
{
int sum=0;
int *ww=new int [n];
for(int i=0;i<n;i++)
x[i]=0;
BiLi(w,v,n,ww);
int j=0;
while(w[j]<C)
{
C=C-w[j];
x[j]=1;
sum=sum+v[j];
j++;
}

x[j]=C/w[j];
sum=sum+ww[j]*v[j];
return sum;
}

void main()
{
int C;
cout<<"背包容量为"<<endl;

cin>>C;
int n;
cout<<"物品个数为"<<endl;
cin>>n;
int *p=new int [n];
int *q=new int[n];
int *x=new int [n];
cout<<"物重"<<endl;
for(int i=0;i<n;i++)
{
cin>>p[i];

}
cout<<"物品价值"<<endl;
for(int j=0;j<n;j++)
{
cin>>q[j];//改为j
}
cout<<"输出最大总价值"<<endl;
cout<< nap(p,q,x,n,C);
cout<<"输出装入的物品"<<endl;
for(int k=0;k<n;k++)
{
cout<<x[k]<<" ";//要改为K
}
}

输出不是地址了,就是不知道逻辑对不对。
ppsharp 2013-05-06
  • 打赏
  • 举报
回复
C++新手表示看不懂,来看答案的。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧