K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

9 tháng 8 2020

mình nghĩ là vậy

à mà tiện thể, ban nãy mình để quên não dưới đất
cho phép mình lụm lên lại cái nha :)))Lập trình đơn giản

9 tháng 8 2020

sửa thêm chỗ else if kia nữa là ok :)))
quaylui(sum, j + 1)

9 tháng 8 2020
var n, i, ans: longint; m: int64; a: array[1..100] of int64; d: array[1..100] of boolean; fi, fo: text; procedure open_file(s: string); begin assign(fi, s + '.INP'); reset(fi); assign(fo, s + '.OUT'); rewrite(fo); end; procedure close_file; begin close(fi); close(fo); end; procedure quaylui(sum, pos: longint); var j: longint; begin for j := pos + 1 to n do if d[j] = false then begin d[j] := true; inc(sum, a[j]); if sum = m then inc(ans) else if sum < m then quaylui(sum, j); dec(sum, a[j]); d[j] := false; end; end; begin open_file('DOEM'); read(fi, n, m); for i := 1 to n do begin read(fi, a[i]); d[i] := false; end; ans := 0; quaylui(0, 0); write(fo, ans); close_file; end.
9 tháng 8 2020

à mình dùng phương pháp sinh bằng đệ quy quay lui để duyệt qua mọi tập con bao gồm các phần tử có chỉ số từ 1 đến n và kiểm tra xem tập con đó có tổng bằng m không. Cứ mỗi lần xuất hiện 1 tập con có tổng bằng m thì mình cộng 1 vào biến kết quả ans và xuất ans ra file kết quả nha bạn

9 tháng 8 2020

Phần "quaylui" được thực hiện như thế nào vậy (tức mỗi câu lệnh của nó thực thi điều gì?)

9 tháng 8 2020

Vậy phương pháp này có thể kiểm tra mọi tập con của mảng trong mọi bài toán hả bạn?

9 tháng 8 2020

cảm ơn ạ :)

9 tháng 8 2020

Hình như nếu mình chỉnh sửa for j:=pos + 1 to n thành for j:=pos to nquaylui(0,0) thành quaylui(0,1) thì kq ko bị thay đổi gì chứ :vv

9 tháng 8 2020

Minh Lê mình thử và thấy kq đúng rồi. Cảm ơn bạn :3

19 tháng 8 2020

Vậy muốn tìm số lượng phần tử của các tập con thì làm ntn ạ?

Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là ai (1 ≤ ai ≤ 100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3 phần thưởng liên tiếp nhau trong dãy. Em hãy lập chương...
Đọc tiếp

Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là ai (1 ≤ ai ≤ 100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3 phần thưởng liên tiếp nhau trong dãy. Em hãy lập chương trình chọn ra các phần thưởng sao cho tổng giá trị của các phần thưởng nhận được là lớn nhất.

Dữ liệu: Cho trong file PTHUONG.INP gồm các dòng:

- Dòng đầu tiên là số phần thưởng N.

- Dòng tiếp theo ghi N số ai (1 ≤ i ≤ N).

Kết quả: Ghi ra file PTHUONG.OUT gồm ba dòng:

- Dòng đầu ghi tổng giá trị lớn nhất của các phần thưởng đã chọn và số lượng các phần tử được chọn đó.

- Dòng tiếp theo ghi vị trí của các phần thưởng đã chọn theo thứ tự trong dãy.

- Dòng cuối cùng ghi giá trị của các phần thưởng đã chọn theo thứ tự trong dãy.

Ví dụ:

PTHUONG.INP PTHUONG.OUT

7

6 9 1 3 5 10 4

32 5

1 2 4 6 7

6 9 3 10 4

1
20 tháng 2 2020

uses crt;

type mang= array[0..10000 ] of byte;

var a,d,m:mang; dd:array[1..20,1..400] of byte;

b:array [1..10000] of boolean;

r,dem, t,n,max,i,j:integer;

f:text;

procedure doc;

var i:integer;

begin

assign(f,'pthuong.inp');

reset(f);

readln(f,n);

for i:=1 to n do

readln(f,d[i]);

close(f);

end;

function kt( c:mang):boolean;

var i,j:longint;

q:boolean;

begin

i:=1;

q:=true;

while (i<=r-2) and q do

begin

j:=1;

while c[i+j-1]+1=c[i+j] do

j:=j+1;

if j>=3 then q:=false else q:=true;

i:=i+1;

end;

kt:=q;

end;

Procedure print;

var i,tong: byte;

begin if kt(a)=true then

begin dem:=dem+1;

tong:=0;

for i:=1 to r do

begin

dd[dem,i]:= a[i];

tong:=tong+d[a[i]];

end; m[dem]:=tong;

end;

end;

Procedure Find(k:byte);

var j: byte;

begin

if k>r then print else

begin

for j:=1 to n do

if b[j] and (j>a[k-1]) then

begin

a[k]:=j; b[j]:=false;

Find(k+1);

b[j]:=true;

end;

end;

end;

begin

clrscr;

doc;

dem:=0;

r:= n-(n div 3);

for t:=1 to n do

b[t]:=true; a[0]:=0;

Find(1);

max:=m[1];

for i:=1 to dem do

if max< m[i] then max:=m[i];

assign(f,'PTHUONG.OUT');

rewrite(f);

writeln(f,max);

for i:=1 to dem do

if max=m[i] then

begin

j:=1;

while (dd[i,j] <>0) do

begin

write(f,dd[i,j]:2);

j:=j+1;

end;

end;

close(f);

end.

Bạn tham khảo bộ code này nhé.

21 tháng 2 2020

Cảm ơn nhiều ạ.

7 tháng 3 2020

var i,n,d:word;
t,b,kt:array[1..10] of word;

procedure nhap;
var f:text;
begin
assign(f,'dulieu.inp');
reset(f);
readln(f,n);
for i:=1 to n do read(f,t[i]);
close(f);
fillchar(b,sizeof(kt),0);
end;

procedure tailap;
var i,j,d:integer;
begin
for i:=1 to n do
begin
d:=0;
for j:=1 to n do
begin
if b[j]=0 then d:=d+1;
if d=t[i]+1 then break;
end;
b[j]:=i;
end;
end;

BEGIN
nhap;
tailap;
for i:=1 to n do write(b[i],' ');
readln
END.

23 tháng 11 2019

câu hỏi này bạn nên để chị @Nguyễn Minh Lệ trả lời giúp bạn

24 tháng 11 2019

Program hotrotinhoc;

var a,b,max,x,d,i,y: longint;

n,k,s: string;

begin

readln(n); s:=n;

while length(n)<>1 do

begini:=i+1;
k:=k+

s[i];

val(k,x);

delete(n,1,1);

val(n,y);

d:=x+y;

if d>max then

begin

max:=y+x;

a:=x;

b:=y;

end;

end;

write(a,' ',b);

readln

end.

Có n file đánh số 1, 2, ..., n. File thứ i có kích thước là ai. Cho trước một số đĩa mềm trắng, dung lượng của mỗi đĩa là M. Yêu cầu: Hãy tìm cách ghi file lên các đĩa mềm sao cho số đĩa mềm phải dùng là ít nhất. (Tất nhiên mỗi đĩa không thể chứa quá dung lượng M và mỗi file phải nằm gọn trong một đĩa nào đó chứ không được cắt nhỏ và ghi vào nhiều đĩa khác nhau). Ràng buộc: 1...
Đọc tiếp

Có n file đánh số 1, 2, ..., n. File thứ i có kích thước là ai. Cho trước một số đĩa mềm trắng, dung lượng của mỗi đĩa là M.

Yêu cầu: Hãy tìm cách ghi file lên các đĩa mềm sao cho số đĩa mềm phải dùng là ít nhất. (Tất nhiên mỗi đĩa không thể chứa quá dung lượng M và mỗi file phải nằm gọn trong một đĩa nào đó chứ không được cắt nhỏ và ghi vào nhiều đĩa khác nhau).

Ràng buộc: 1 ≤ n ≤ 100; các ai và M là các số nguyên dương: 1 ≤ ai ≤ M ≤ 10000. ∀i

Dữ liệu: Vào từ file văn bản DISKS.INP

. Dòng 1: Chứa 2 số n, M.

. Các dòng tiếp: Chứa các số từ a1 đến an theo đúng thứ tự đó.

Kết quả: Ghi ra file văn bản DISKS.OUT

. Dòng 1: Ghi số k là số đĩa phải dùng.

. Dòng thứ i trong k dòng tiếp theo: Ghi số hiệu của các file được ghi vào đĩa mềm thứ i.

Ví dụ:

DISKS.INP DISKS.OUT

8 14

9 7 4 3 3 2 8 6

3

1 4 6

7 8

2 3 5

2
18 tháng 2 2020

ko hiểu gì luôn ???lolang

23 tháng 12 2019

var
i,j,n,k,x,vt:longint;
s,r,s1,s2:ansistring;
A:array[0..101] of boolean;
B:array[0..101] of longint;

BEGIN
assign(input,'gach.inp'); reset(input);
assign(output,'gach.out'); rewrite(output);

read(n,k);

for i:=1 to 101 do
A[i]:=true;

A[1]:=false;
for i:=1 to trunc(sqrt(101)) do
if (A[i] = true) then
for j:=2 to 101 div i do
A[i*j]:=false;

vt:=0;
for i:=1 to 101 do
if (A[i] =true) then
begin
inc(vt);
B[vt]:=i;
end;

for i:=1 to n do
begin
str(B[i],r);
s:=s+r;
end;

x:=length(s)-k-1;
vt:=1;
while (x >= 0) do
begin
for j:=vt to length(s)-x do
if (s[vt] > s[j]) then vt:=j;
s1:=s1+s[vt];
dec(x);
inc(vt);
end;

x:=length(s)-k-1;
vt:=1;
while (x >= 0) do
begin
for j:=vt to length(s)-x do
if (s[vt] < s[j]) then vt:=j;
s2:=s2+s[vt];
dec(x);
inc(vt);
end;

writeln(s);
writeln(s1);
writeln(s2);

close(input);
close(output);
END.

23 tháng 12 2019

không ai thèm trả lời thì thôi tự trl cho nó nhanh

23 tháng 8 2023

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n,k;
    cin >> n >> k;
    int a[n];
    for (int i=0;i<n;i++)
        cin >> a[i];
    sort(a,a+n);
    cout << a[k-1];
    return 0;
}

24 tháng 5 2019

uses crt;
var n,n1,s:real;
begin
clrscr;
write('Nhap n: ');readln(n);
n1:=2*n+1;
s:=((n1 - 1)/2+1)*(n1 + 1)/2;
write(s:0:0);
readln
end.