Chào mọi người ạ. Em đang học toán rời rạc, đến phần thuật toán quay lui. Có một đề bài sau (như trong hình dưới cùng bài làm). Bài làm của em như vậy nhưng khi chạy, em thử cho N=4, b=4, a[i] nhận các giá trị 1; 2; 1; 1 nhưng chỉ có dãy 0 0 0 0 được in lên màn hình. Chỉ giúp em là vấn đề ở đâu được ko ạ? (Trong bài làm chỉ số của x và a em kí hiệu là i, giá trị có thể nhận của x[i] em kí hiệu là j)
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "math.h"
int i, j, x[100], a[100], b, N;
void nhapsolieu ()
{
printf("\n Nhap N: ");
scanf("%d", &N);
printf("\n Nhap b= ");
scanf("%d", &b);
for(i=0;i<N;++i)
{
printf("\n Nhap a[%0.0d]= ", i+1);
scanf("%d", &a[i]);
}
}
void inketqua()
{
for(i=0;i<N;++i)
{
printf(" %0d ", x[i]);
}
}
int S (int k)
{
int A;
A=0;
for(i=0;i<=k;++i)
{
A=A+a[i]*x[i];
}
return A;
}
int thugiatri (int i)
{
for(j=0;j<2;++j)
{
if(((i==0)&&(j*a[0]<=b))||((i>0)&&(i<N-1)&&(S(i-1)+j*a[i]<=b))||((i==N-1)&&(S(i-1)+j*a[i]==b)))
{
x[i]=j;
if(i=N-1)
{
inketqua();
}
else
{
thugiatri(i+1);
}
}
}
}
main()
{
nhapsolieu();
S(0);
thugiatri(0);
getch();
}
Đã được chỉnh sửa lần cuối bởi danchoi : 07-10-2018 lúc 09:48 PM.