Giúp đỡ về giải thuật, có hậu tạ.

Hàm cơ bản tao đéo code được :vozvn (19):
Khó quá thì tao mò gúc.
Nhưng sp của tao giờ thì hehe hoành phết đấy
Mày thì nói làm Lồn,dkm,khoe khoang ít thôi,để a e còn có niềm tin cố gắng,dkm đang học mẫu giáo mày vào thách đố toán cấp 3 thì nhanh nản bỏ mẹ
 
N = int(input())
a = []
for i in range(N):
a.append(int(input()))

def f(s,n):
if n<N:
f(s+a[n],n+1)
f(s,n+1)
else:
if s!=0:
print(s)

f(0,0)
vậy thôi
nhập n
rồi nhập từng số
Chưa hiểu chỗ nhập n với nhập từng số lắm. Ví dụ tệp tao có 5 số 1,2,3,4,5 thì tao nhập như nào?
 
#N = int(input())
a = [1,2,3,4,5]
#for i in range(N):
#a.append(int(input()))

def f(s,n):
if n<N:
f(s+a[n],n+1)
f(s,n+1)
else:
if s!=0:
print(s)

f(0,0)
Mà code này code gì đây? Đây phải python hả? Tao mới học python ah, mày conver sang python giúp t luôn đi. Chạy mượt thì pm t stk tao ném cho củ quả mà đi hẹn hò :))
 
Đang ngồi trên máy test thử xem còn làm được mấy bài giải thuật ko.
Này chỉ check tổ hợp thôi, mà check thông minh chút, sắp từ lến đến bé rồi cộng dần dần vào, nếu tổng đã lớn hơn target thì đéo cần cộng mấy số sau nữa.

JavaScript:
const targetNumber = 158;
const arrInput = [1, 3, 9, 14, 29, 33, 37, 48, 49, 51];

// Chạy tự lớn đến bé.
const arr = arrInput.sort((x, y) => y - x);

testSum(0, arr, []);

function testSum(callerSum, arrTest, callerResult)
{
    for(let multiple of [1, 0]) {
        const newSum = callerSum + arrTest[0] * multiple;
          if(newSum > targetNumber) {
          // Lớn hơn thì không cần check nữa
          continue;
        }

          // Chỉ thêm vào bộ result nếu mutiple = 1
          const result = [...callerResult];
          if(multiple == 1) {
              result.push(arrTest[0]);
            // và nếu = target thì in kết quả
              if(newSum == targetNumber) {
                printResult(result);
            }
        }

          // Tiếp tục check với số tiếp theo nếu chưa phải số cuối + array sau khi giảm đi thằng hiện tại
          if(arrTest.length <= 1) {
              continue;
        } else {
            testSum(newSum, arrTest.slice(1), result)
        }
    }
}

function printResult(result) {
    
      console.log("- ", result);
}
 
Chào mấy tml, trong đây chắc cũng có nhiều cao nhân về thuật toán nên tao mạn phép xin nhờ giúp đỡ tao một giải thuật khá đơn giản nhưng tao dốt quá chưa nghĩ ra dc.

Có một tệp gồm các số tự nhiên bất kỳ không trùng nhau. Ví dụ: [1,3,9,14,29,33,37,48,49,51]

Tao muốn tìm a, biết a là tổng của các số thuộc tệp trên (không phải tất cả mà là một vài số trong tệp đó thôi). Ví dụ a = 158 = 51 + 48 + 33 + 14 + 9 + 3

Vậy tao phải chạy thuật toán loại trừ thế nào để ra được tất cả các kết quả có thể của a?

Tml nào giúp tao với, xin hậu tạ ly cafe :(



 

Có thể bạn quan tâm

Top