Bài tập  /  Bài đang cần trả lời

Cho một số tự nhiên N ≤ 9

Cho một số tự nhiên N ≤ 9. Giữa các số từ 1 đến N hãy thêm vào các dấu + và - sao cho kết quả thu được bằng 0. Hãy viết chương trình tìm tất cả các khả năng có thể
Áp dụng quay lui C++
Mọi người giúp mình với
2 Xem trả lời
Hỏi chi tiết
212
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Dưới đây là đoạn code C++ để tìm tất cả các khả năng thêm dấu + và - vào giữa các số từ 1 đến N sao cho tổng bằng 0:

```cpp
#include
#include

using namespace std;

void printResult(vector& nums, vector& ops) {
for (int i = 0; i < nums.size(); i++) {
cout << nums[i];
if (i < ops.size()) {
cout << ops[i];
}
}
cout << endl;
}

void findCombinations(int N, int sum, int currentNum, vector& nums, vector& ops) {
if (currentNum == N) {
if (sum == 0) {
printResult(nums, ops);
}
return;
}

// Thêm dấu + vào sau currentNum
nums.push_back(currentNum);
ops.push_back('+');
findCombinations(N, sum + currentNum, currentNum + 1, nums, ops);
nums.pop_back();
ops.pop_back();

// Thêm dấu - vào sau currentNum
nums.push_back(currentNum);
ops.push_back('-');
findCombinations(N, sum - currentNum, currentNum + 1, nums, ops);
nums.pop_back();
ops.pop_back();
}

int main() {
int N;
cout << "Nhap so N (N <= 9): ";
cin >> N;

vector nums;
vector ops;

findCombinations(N, 0, 1, nums, ops);

return 0;
}
```

Bạn có thể chạy đoạn code trên để tìm tất cả các khả năng thêm dấu + và - vào giữa các số từ 1 đến N sao cho tổng bằng 0. Chúc bạn thành công!
1
1
Quang Huy
12/05 14:49:47
+5đ tặng
Program Zero_sum;
Type MangStr = array[1..15] of string;
Const Fi =’ZERO.INP’;
Fo =’ZERO.OUT’;
Dau : array[1..3] of string[1] = (’-’,’+’,’’);
S : array[1..9] of char =(’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’);
ChuSo = [’1’..’9’];

Var N,k,dem: byte;
D : array[2..9] of string[1];
F : Text;
St : String;
M : MangStr;

Procedure Write_out;
Var i : byte;
Begin
Assign(F,Fo); Rewrite(F);
Writeln(F,dem);
For i:= 1 to dem do writeln(F,M[i],’ = 0’);
Close(F); Halt;
End;

Procedure Read_inp;
Begin
Assign(F,Fi); Reset(F);
Read(F,N); Close(F);
If N < 3 then write_out;
End;

Function DocSo(S : String): longint;
Var M : longint;
t : byte;
Begin
M:= 0; t:= 0;
If S[k] in [’+’,’-’] then
begin
t:= k; Inc(k);
end;
While (k<= length(S)) and (s[k] in ChuSo) do
begin
m:= m*10 + ord(s[k]) - ord(’0’);
Inc(k);
end;
If (t <> 0) and (S[t] = ’-’) then DocSo:= -M
else DocSo:= M;
End;

Procedure Test;
Var St : string;
i : byte;
T : longint;
Begin
St:= ’1’; k:= 1; T:= 0;
For i:= 2 to N do St:= St + D[i] + S[i];
While k < length(St) + 1 do T:= T + DocSo(St);
If T = 0 then
begin
Inc(dem); M[dem]:= St;
end;
End;

Procedure Try(i: byte);
Var j : byte;
Begin
For j:= 1 to 3 do
begin
D[i]:= Dau[j];
If i = N then Test else try(i+1);
end;
End;

BEGIN
Read_inp;
Try(2);
Write_out;
END.

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập
0
0
Võ Tuấn Tài
21/06 09:05:40
#include <iostream>
#include <vector>

using namespace std;

void solve(int N, int currentSum, int currentNum, vector<int>& path) {
    if (currentNum == N) {
        if (currentSum == 0) {
            for (int i = 1; i < N; ++i) {
                cout << i << (path[i] ? " + " : " - ");
            }
            cout << N << endl;
        }
        return;
    }

    path[currentNum] = 1; // Dùng dấu "+"
    solve(N, currentSum + currentNum, currentNum + 1, path);

    path[currentNum] = 0; // Dùng dấu "-"
    solve(N, currentSum - currentNum, currentNum + 1, path);
}

int main() {
    int N;
    cout << "Nhap so tu nhien N (N <= 9): ";
    cin >> N;

    vector<int> path(N + 1);
    solve(N, 0, 1, path);

    return 0;
}

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×