30/09/2018, 20:36
Giải bài toán cái cân cân bằng bằng đệ quy
Đề bài: cho n quả cân, chọn k quả cân (k <= n) sao cho cái cân cân bằng sử dụng đệ quy. Em mới học đệ quy và đã cố gắng code nhưng tới đây thì bí rồi. Mong mọi người trong group hỗ trợ:
Đây là source code của em ạ:
#include <stdio.h>
int A[100] = { 0 }, B[100] = { 0 }; //Mô phỏng 2 đòn cân ./.
int Arr_Weight[100]; //Chứa các quả cân ./.
int N = 0;
int Sum(int Arr[], int N)
{
int sum = 0;
for (int i = 0; i < N; ++i)
sum += Arr[i];
return sum;
}
void Print(int Arr[], int N)
{
for (int i = 0; i < N; ++i)
printf("%d ", Arr[i]);
printf(" ");
}
void Simulation_Scale(int A[], int B[], int a, int b, bool ok[], int N) //a, b là số quả cân lần lượt của A và B
{
if (N < 0)
{
if (Sum(A, a) == Sum(B, b))
Print(A, a), Print(B, b);
}
else
{
for (int i = 0; i < N; i++)
if (ok[i])
{
ok[i] = false;
if (Sum(A, a) < Sum(B, b)) A[a++] = Arr_Weight[i];
else B[b++] = Arr_Weight[i];
Simulation_Scale(A, B, a, b, ok, N - 1);
ok[i] = true;
}
}
}
int main()
{
int a = 0, b = 0;
printf("Nhap vao so qua can: ");
scanf("%d", &N);
for (int i = 0; i < N; ++i) {
printf("Qua can thu [%d]: ", i + 1);
scanf("%d", Arr_Weight + i);
}
bool ok[100];
for (int i = 0; i < N; ++i) ok[i] = true;
A[0] = Arr_Weight[0], a++;
Simulation_Scale(A, B, a, b, ok, N);
return 0;
}
Bài liên quan