1 Chia sẻ 1 bài đệ qui: lập biểu thức với 2 dấu +,- 2009-11-13, 12:31
tranhanhuy
Thành Viên
Đề: lập biểu thức.
Vd: cho 1 mảng gồm có n số nguyên
với 2 dấu +, - sao cho a[0]?a[1]?a[2]?...?a[n-1] = N
thay 2 dấu + , - vào dấu ?
sử dụng đệ qui
Vd: cho 1 mảng gồm có n số nguyên
với 2 dấu +, - sao cho a[0]?a[1]?a[2]?...?a[n-1] = N
thay 2 dấu + , - vào dấu ?
sử dụng đệ qui
- Code:
#include <stdio.h>
#include <conio.h>
int TinhTong(int a[], int SoPhanTu, char DayPhepToan[50])
{
int kq = a[0];
for (int i=1; i<SoPhanTu; i++)
{
if (DayPhepToan[i-1]=='+')
{
kq += a[i];
}
else
{
kq -= a[i];
}
}
return kq;
}
void TimCongTru(int a[], int SoPhanTu,int N, char DayPhepToan[50], int i, bool &KetThuc)
{
if (i == SoPhanTu-1)
{
//ktra tong
int kq = TinhTong(a,SoPhanTu,DayPhepToan);
if (kq == N )
{
KetThuc = true;
return;
}
}
else
{
char PhepTinh[3] = "+-";
for (int j=0; j<2; j++)
{
DayPhepToan[i] = PhepTinh[j];
i++;
TimCongTru(a,SoPhanTu,N,DayPhepToan, i,KetThuc);
if (KetThuc == true)
{
return;
}
i--;
}
}
}
void Xuat(int a[], int SoPhanTu, int N, char DayPhepToan[])
{
for (int i=0; i<SoPhanTu-1; i++)
{
printf("%d",a[i]);
printf("%c",DayPhepToan[i]);
}
printf("%d=%d",a[SoPhanTu-1],N);
}
void main()
{
int a[30] = {1,2,3};
int N = 6;
int SoPhanTu = 3;
char DayPhepToan[50];
bool KetThuc = false;
TimCongTru(a,SoPhanTu,N,DayPhepToan,0,KetThuc);
if (KetThuc == false)
{
printf("ko lap duoc bieu thuc");
}
else
{
Xuat(a,SoPhanTu,N,DayPhepToan);
}
getch();
}