c语言-帮忙看个背包问题,输入数据不成功

问题描述

帮忙看个背包问题,输入数据不成功

#include”stdio.h“
#include“iostream”
#define M 20
typedef struct node{
int weight;
int price;
int flag;
}Node;
typedef struct knap {
Node a[M];
int total;
int size;
}*Knap;
int f(Knap k)
{
int index=-1;
int mp=0;
int i;
for(i=0;isize-1;i++)
{
if((k->a[i].flag==0)&&(k->a[i].price>mp))
{
mp=k->a[i].price;
index=i;
}
}
return index;
}
void PrintResult(Knap k)
{
int i=0;
int total=0;
for(i=0;isize-1;i++)
{
if(k->a[i].flag==1)
{
total+=k->a[i].price;
printf("%dn",k->a[i].price);
}
}
printf("total= %dn",total);
}
void select(Knap k,int f(Knap k))
{
int idx;
int count=0;
while((idx=f(k))!=-1)
{
if((count+k->a[idx].weight)<=k->total)
{
k->a[idx].flag=1;
count+=k->a[idx].weight;
k->total-count;
printf("total= %dn",k->total);
}
else{
k->a[idx].flag=2;
}
}
PrintResult(k);
}
int main()
{
int a[20];
int b[20];
Knap k;
int n,i,m;
printf("你准备对几件物品进行操作:");
scanf("%d",&n);
k->size=n;
printf("请输入你限制的总重量:");
scanf("%d",&m);
k->total=m;
for(i=0;i
{
printf("请输入第%d件物品的价值",i);
scanf("%d",&a[i]);
k->a[i].price=a[i];
}
for(i=0;i
{
printf("请输入第%d件物品的重量",i);
scanf("%d",&b[i]);
k->a[i].weight=b[i];
}
select(k,f);
return 0;
}

解决方案

你倒是把问题贴出来呀。

解决方案二:

就是给你限制的最大重量,和几个重量,和价值,
求不超过重量的最大价值
0/1背包问题

解决方案三:

http://blog.csdn.net/mu399/article/details/7722810

时间: 2024-09-17 04:33:59

c语言-帮忙看个背包问题,输入数据不成功的相关文章

c语言-帮忙看下C语言打印错误

问题描述 帮忙看下C语言打印错误 #include int main(void) { int n,i,j,t; scanf("%d",&n); for(i=1;i<=4;i++){ for (j=1;j<=n-i;j++) printf(" "); for(t=1;t<=2i-1;t++) printf("*"); printf("n");} for(i=3;i>=1;i--){ for (j=

大家帮忙看一下这个c语言数组程序哪里有缺陷呀

问题描述 大家帮忙看一下这个c语言数组程序哪里有缺陷呀 /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include<stdio.h> int main() { int a[100],i,min,n,index;//min记录最小数所在的下标 scanf("%d",&n); for(i=0;i<n;i++)/*输入n个数并保存到数组a*/ scanf("%d",&a[i]); /

c语言-特殊回文数,大神们帮忙看一看,为什么编译通过而不会运行

问题描述 特殊回文数,大神们帮忙看一看,为什么编译通过而不会运行 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行. 样例输入 52 样例输出 899998 989989 998899 #include int main() { int a,b,c,d,e,f,n,m; scanf("%dn&quo

指针-大家帮忙看一下这个c语言题目~~

问题描述 大家帮忙看一下这个c语言题目~~ 凯撒加密-指针作函数参数 从键盘输入一个字符串(长度不超过500),使用凯撒加密算法加密(即第1个字母变成其后第k个字母,k从键盘输入.非字母字符不变.),其加密函数声明:void Caesar(char *p,int k); 将字符串的原文和密文分别输出到屏幕上,移位数位k,k也从键盘输入. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include <stdio.h> void Caesar

c语言-求问C语言大神,帮忙看一下这道题~~

问题描述 求问C语言大神,帮忙看一下这道题~~ 分离单词 Description 编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号','或小数点'.'作为标点符号)作为分隔符,对字符串中所有单词进行倒排,然后把已处理的字符串(应不含标点符号)打印出来. Input 输入一个字符串(包含大小写字母.空格.逗号或小数点) Output 输出处理后的字符串. Sample Input I am a student. I like study. Sample Output study li

printf-c语言代码问题,麻烦大家帮忙看一下~~

问题描述 c语言代码问题,麻烦大家帮忙看一下~~ 参加期中考试的人数约在 380~450 人之间,总平均分为 76 分,男生的平均分为 75 分,女生的平均分为 80.1 分,问男女生各有多少人? #include<stdio.h>int main() {int ab;for(a=0;a<=450;a++) for(b=0;b<=450;b++) if((380<=(a+b)&&(a+b)<=450)&&(75*a+80.1*b==(a+

数学-c语言题目求助~~~大家帮忙看一下这个代码有啥错误

问题描述 c语言题目求助~~~大家帮忙看一下这个代码有啥错误 **1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数. **它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字. 但是,它发散的很慢: 前1项和达到 1.0前4项和才超过 2.0前83项的和才超过 5.0 那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?** 请填写这个整数. 注意:只需要填写一个整数,不要填写任何多余的内容.比如说明文字.** #include<stdio

帮忙看一下c语言这个关于数组的错误~

问题描述 帮忙看一下c语言这个关于数组的错误~ 输入 10 个整数用选择排序法将它们按照升序排列好 原理说明:把一个数组从小到大排列,不停的扫描整个数组,第一次扫描把最小的数找出来并放在第一位,第二次扫描,把其余的数中最小的数找到放在第二位,以此类推,这样经过N-1次扫描之后就可以把N个数的顺序排列好了 #define A 10#include <stdio.h>int main(){ int a[A]ijkt; for(i=0;i<A;i++) scanf(""%d

新人问一个c语言问题,麻烦各位帮忙看一下

问题描述 新人问一个c语言问题,麻烦各位帮忙看一下 一个小型成绩管理系统:#include #include #define N 40int Readscore(int score[]long id[]);int Linsearch(long id[]long mint n);void Linsort(int score[]long id[]int n);void Selectsort(int score[]long id[]int n);int Binsearch(long id[]long