Trở về đầu
Mời các bạn Download code tại: Click here
1. Dữ liệu vào: Click here
- Gồm hai số N và M
2. Kết quả:
- Ghi ra các cách điền dấu +/- để biểu thức sau đúng:
? 1 ? 2 ? 3 ? ... ? M = N
const fi = 'DIENDAU.INP';
fo = 'DIENDAU.OUT';
MAXN = 20;
dau: array [1..2] of char = ('+', '-');
giatri: array [1..2] of integer = ( 1 , -1); // gia tri cua dau
var f: text;
n, m, s: integer;
a: array [1..MAXN] of char;
dem: integer;
procedure Nhap;
begin
assign(f, fi); reset(f);
readln(f, n, m);
close(f);
dem:= 0;
s:= 0;
end;
procedure InKQ;
var i: integer;
begin
if s <> m then exit;
inc(dem);
write(f, dem:3, ': ');
for i:= 1 to n do
write(f, a[i], ' ', i, ' ');
writeln(f, ' = ', m);
end;
procedure Try2(i: integer); // dien gia tri cho vi tri thu i
var j: integer;
begin
for j:= 1 to 2 do
begin
a[i]:= dau[j];
s := s + giatri[j] * i;
if i = n then InKQ
else Try2(i+1);
s := s - giatri[j] * i;
end;
end;
BEGIN
Nhap;
assign(f, fo); rewrite(f);
Try2(1);
close(f);
END.
Mời các bạn Download code trên ngôn ngữ Java tại: Click here
import java.util.Scanner;
public class Thaythedau {
private int n,m;
private int dau[];
private int a[];
public void Nhap() {
Scanner scan = new Scanner(System.in);
System.out.print("Nhap gia tri n: ");
n = scan.nextInt();
System.out.print("Nhap gia tri m: ");
m = scan.nextInt();
scan.close();
}
public void Init() {
a = new int[n + 1];
dau = new int[2];
dau[0] = -1;
dau[1] = 1;
}
public void InKQ() {
int s = 0;
int i;
for( i = 1; i <= n; i++ )
s = s + a[i]*i;
if( s == m ) {
for(i = 1; i <= n; i++) {
if(a[i] == 1) System.out.print(" + " + i);
else System.out.print(" - " + i);
}
System.out.println(" = " + m);
}
}
public void Try2(int i) {
int j;
for( j = 0; j <=1; j++) {
a[i] = dau[j];
if (i == n) InKQ();
else Try2(i + 1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thaythedau t = new Thaythedau();
t.Nhap();
t.Init();
t.Try2(1);
}
}