B
biv171
ребят если можете помогите плиз,я тока начал(пытаюсь) программировать на С и столкнулся вот с чем,задача у меня про рюкзак,решаю я эту задачу с помощью наивного алгоритма , т.е перебираю все возможные варианты так если вещей 3 ,то 001,010,011,100,101,110,111..вроде как все компилируется,а ответ неправильный(в коде я вроде как уверен все логично)т.е например:нам дан максимальный вес 6 кг вещей у нас три : 1кг ,2кг, 3кг т.е ответ д/б [1 1 1]..
подскажите пожайлуста где я еще накосячил???
подскажите пожайлуста где я еще накосячил???
Код:
#include <stdio.h>
#include <stdlib.h >
void prt(int n,int s);
int main()
{
int i,a[20],s,n;
printf("Vvedite kolichestvo elementov= ");
scanf("%d",&n);
printf ("vvedite elementi a[i]: ");
for(i=1;i<=n;++i)
scanf("%d",&a[i]);
//for (i=1;i<n;++i)
// printf("%d",a[i]);
printf("vvedite symmy S= ");
scanf("%d",&s);
prt(n,s);
}
void prt(int n,int s)
{
int flag,sum,p,i,j;
int a[20];
int e[20];
int ans[20][20];
flag=0;
for(i=1;i<n;++i)
e[i]=0;
p=0;
while (flag==0) {
i=1;
if (e[i]==0)
e[i]=1;
else {
while (e[i]==1) {
e[i]=0;
++i;
}
e[i]=1;
}
flag=1;
for(j=1;j<n;++j) {
flag=e[j]*flag;
}
sum=0;
for(j=1;j<n;++j)
sum=a[j]*e[j] + sum;
if (s==sum) {
++p;
for(j=1;j<n;++j)
ans[p][j]=e[j];
}
}
if (p>0){
for(j=1;j<p;++j)
{
printf("[");
for(i=1;i<n;++i)
printf( "%d",ans[j][i]);
printf("]\n");
}
}
else printf("net reshenia\n");
}