Tin học Tây Sơn

dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Go down

dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Admin on Fri Nov 09, 2018 3:13 pm

Bài 5:
   Cho một dãy gồm N số nguyên và một số nguyên dương K. Hãy tìm một dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.
   Dữ liệu vào: được cho trong file DAYSO.INP, có cấu trúc như sau:
               – Dòng 1: gồm 2 số N và K (N £ 500000, K £ 10000);
               – N dòng tiếp theo: mỗi dòng là 1 số nguyên của dãy (các số kiểu Longint).
   Dữ liệu ra: ghi vào file DAYSO.OUT gồm 1 dòng duy nhất chứa hai số M và S, trong đó M là độ dài lớn nhất tìm được và S là vị trí bắt đầu của dãy đó.
   Ví dụ:                                    
DAYSO.INP
DAYSO.OUT
3  2
1
2
3
3  1
avatar
Admin
Admin
Admin

Posts : 640
Reputation : -35
Join date : 16/11/2015
Age : 29

Xem lý lịch thành viên http://tinhocts.forumvi.com

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by mainhatthong2004 on Sat Nov 10, 2018 8:16 am

Code:
sao hai bài giống nhau vậy thầy
avatar
mainhatthong2004
Năng động
Năng động

Posts : 62
Reputation : -24
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by mainhatthong2004 on Sat Nov 10, 2018 4:29 pm

thong:
program bai3;
uses crt;
var fi,fo:text;
a:array[1..100] of integer;
n,k,i,j,t,max,d,vt:longint;
//------------------------------------------
procedure doc;
begin
assign(fi,'dayso.inp');
reset(fi);
read(fi,n,k);
readln(fi);
for i:=1 to n do
readln(fi,a[i]);
close(fi);
end;
//--------------------------------------------
procedure viet;
begin
assign(fo,'dayso.out');
rewrite(fo);
for i:=1 to n-1 do
begin
t:=0; d:=0;
for j:=i to n do
begin
t:=t+a[j]; inc(d);
if (t mod k=0) and (d>max) then
begin
max:=d;
vt:=i;
end;
end;
end;
if max=0 then
       write(fo,'ko co ') else
write(fo,max,' ',vt);
close(fo);
end;
//----------------------------------------------
begin
clrscr;
doc;
viet;
readln;
end.



Được sửa bởi mainhatthong2004 ngày Sat Nov 10, 2018 4:36 pm; sửa lần 1.
avatar
mainhatthong2004
Năng động
Năng động

Posts : 62
Reputation : -24
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by nguyen77 on Sat Nov 10, 2018 4:34 pm

Code:
program bt;
uses crt;
var i,n,t,dem,vtd,vtc,j,k,max,d:longint;
a:array[1..100] of longint;
fi,fo:text;

begin
clrscr;
assign(fi,'dayso.inp');
reset(fi);
read(fi,n);
readln(fi,k);
for i:=1 to n do
        READln(fi,a[i]);
close(fi);

assign(fo,'dayso.out');
rewrite(fo);
for i:=1 to n do
        begin
        dem:=0;
        t:=0;
        for j:=i to n do
                begin
                t:=t+a[j];
                inc(dem);
                if (t mod k=0) and (dem>max) then
                        begin
                        max:=dem;
                        vtd:=i;
                        vtc:=j;
                        end;
                end;
        end;

if max=0 then

        write( fo,' ko co ')
        else
        begin
        write(fo,vtc-vtd+1,#32);
write(fo,vtd,#32);
end;
close(fo);
        readln;
        end.
avatar
nguyen77
Năng động
Năng động

Posts : 58
Reputation : -22
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Nguyễn Văn Biên on Sat Nov 10, 2018 4:37 pm

NEED TEST:
program Bai_5;
var fi,fo:text;
n,k,i,j,d,t,m,s:longint;
A:array[1..100000] of longint;

begin
assign(fi,'DAYSO.INP'); reset(fi);
readln(fi,n,k);
for i:=1 to n do read(fi,A[i]);
close(fi);
m:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
t:=0;
for d:=i to j do t:=t+A[d];
if (t mod k = 0) and (j-i+1>m) then
begin s:=i; m:=j-i+1 end;
end;
assign(fo,'DAYSO.OUT'); rewrite(fo);
if m=0 then write(fo,'Khong co')
else write(fo,m,#32,s);
close(fo)
end.
avatar
Nguyễn Văn Biên
S-mod
S-mod

Posts : 170
Reputation : 22
Join date : 18/06/2018
Age : 14
Location : ?

Xem lý lịch thành viên https://bien2004official.blogspot.com

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by quantran on Sat Nov 10, 2018 5:00 pm

code cua em:
program bai5;
var
s,n,i,j,vtd,vtc,d,k,max:longint;
a:array[1..100] of longint;
fi,fo:text;
//----------------------------
procedure doc;
begin
assign(fi,'dayso.inp');
reset(fi);
readln(fi,n,k);
for i:=1 to n do
read(fi,a[i]);
close(fi);
end;
//-----------------------------
procedure ghi;
begin
assign(fo,'DAY SO.out');
rewrite(fo);
for i:=1 to n-1 do
begin
s:=a[i];
d:=0;
for j:=i+1 to n do
begin
s:=s+a[j];
d:=d+1;
if (s mod k=0) and (d>max ) then
begin
max:=d;
vtd:=i;
vtc:=j;
end;
end;
end;
if (max=0)then
write(fo,'khong co ')
else
begin
write(fo,vtc-vtd+1,#32);
write(fo,vtd,#32);
end;
close(fo);
end;
//-----------------------
begin
doc;
ghi;
readln;
end.
avatar
quantran
Năng động
Năng động

Posts : 63
Reputation : -20
Join date : 18/06/2018
Age : 14
Location : Binh Thuan-Tay Son-Binh Dinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Cao Hải Dương on Sat Nov 10, 2018 5:02 pm

CODE:
Program Bai_5;
Uses crt;
Var fi,fo:text; n,k,i,max,vt,j,d,s:longint;
a:array[1..100] of longint;

Begin
Clrscr;
Assign(fi,'DAYSO.INP'); Reset(fi);
Readln(fi,n,k);
For i:=1 to n do Readln(fi,a[i]);
Close(fi);
Assign(fo,'DAYSO.OUT'); Rewrite(fo);
For i:=1 to n-1 do
Begin
d:=0; s:=0;
For j:=i to n do
Begin
s:=s+a[j];
inc(d);
If (d>max) and (s mod k = 0) then Begin max:=d; vt:=i End;
End;
End;
If max=0 then write(fo,'Khong co day con thoa man dieu kien')
Else write(fo,max,#32,vt);
Close(fo);
Readln;
End.
avatar
Cao Hải Dương
Năng động
Năng động

Posts : 46
Reputation : 14
Join date : 18/06/2018
Age : 14
Location : Bình Định

Xem lý lịch thành viên http://starduongdesign.blogspot.com

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by tonguyengiahan237 on Sat Nov 10, 2018 5:02 pm

Code:
Program Day_con_dai_nhat;
Uses crt;
Type Mang=array[1..100] of integer;
Var a:Mang;
    fi,fo:text;
    n,k:integer;

Procedure doc_du_lieu(Var n,k:integer;Var a:Mang; Var fi:text);
Var i:integer;
Begin
Assign(fi,'DAYSO.INP');
Reset(fi);
Read(fi,n,k);
Readln(fi);
For i:=1 to n do
Readln(fi,a[i]);
Close(fi);
End;

Procedure Tim_day_con(Var n,k:integer;Var a:Mang; Var fo:text);
Var i,j,Tong,Max,M,S:integer;
Begin
Assign(fo,'DAYSO.OUT');
Rewrite(fo);
For i:=1 to n-1 do
Begin
Tong:=0; M:=0;
For j:=i to n do
Begin
Tong:=Tong+a[j]; M:=M+1;
If (Tong mod k=0) and (M>Max) then
Begin
Max:=M;
S:=i;
End;
End;
End;
If Max=0 then write(fo,'dieu kien trong tep khong thoa man ') else write(fo,Max,'  ',S);
Close(fo);
end;

BEGIN
clrscr;
doc_du_lieu(n,k,a,fi);
Tim_day_con(n,k,a,fo);
readln;
end.


Được sửa bởi tonguyengiahan237 ngày Mon Nov 12, 2018 3:26 pm; sửa lần 2.
avatar
tonguyengiahan237
Teen Chính hiệu
Teen Chính hiệu

Posts : 16
Reputation : -3
Join date : 06/11/2018
Age : 14
Location : TT Phú Phong Huyện Tây Sơn Tỉnh Bình Định

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by nguyenngocthien on Sat Nov 10, 2018 5:03 pm

Code:
program bai5;
uses crt;
var fi,fo:text;
a:array[1..100] of integer;
n,k,i,j,t,max,dem,vt:longint;

procedure doc;
begin
assign(fi,'dayso.inp');
reset(fi);
read(fi,n,k);
readln(fi);
for i:=1 to n do
readln(fi,a[i]);
close(fi);
end;

procedure viet;
begin
assign(fo,'dayso.out');
rewrite(fo);
for i:=1 to n-1 do
begin
t:=0; dem:=0;
for j:=i to n do
begin
t:=t+a[j]; inc(dem);
if (t mod k=0) and (dem>max) then
begin
max:=dem;
vt:=i;
end;
end;
end;
if max=0 then
write(fo,'ko co ') else
write(fo,max,' ',vt);
close(fo);
end;

begin
clrscr;
doc;
viet;
readln;
end.
avatar
nguyenngocthien
Teen Chính hiệu
Teen Chính hiệu

Posts : 11
Reputation : -4
Join date : 06/11/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by truongquocbao2004 on Sat Nov 10, 2018 5:04 pm

Code:
program bai5;
uses crt;
var fi,fo:text;
    i,j,n,k,max,s,vt,x:integer;
    a:array[1..100]of integer;

procedure doc;
begin
assign(fi,'dayso.inp');
reset(fi);
readln(fi,n,k);
for i:=1 to n do readln(fi,a[i]);
close(fi);
end;

procedure ghi;
begin
assign(fo,'dayso.out');
rewrite(fo);
max:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
s:=0;
for x:=i to j do s:=s+a[x];
if (s mod k=0)and(j+i-1>max) then begin max:=j+i-1;vt:=i;end;
end;
if max=0 then write('khong co') else write(fo,max,' ',vt);
close(fo);
end;

begin
clrscr;
doc;
ghi;
readln;
end.
avatar
truongquocbao2004
Nhiệt tình
Nhiệt tình

Posts : 35
Reputation : -10
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by thanhtruc on Mon Nov 12, 2018 12:41 pm

Code:
Program bai5;
Uses crt;
Type Mang=array[1..100]of integer;
Var a:Mang;
n,k:integer;
fi,fo:text;

Procedure Doc;
Var i:integer;
Begin
Assign(fi,'DAYSO.INP');
Reset(fi);
Read(fi,n,k);
For i:=1 to n do
Readln(fi,a[i]);
Close (fi);
End;

Procedure Day;
Var T,Max,S,i,j,M,f:integer;
Begin
Assign(fo,'DAYSO.OUT');
Rewrite(fo);
i:=0;
For i:=1 to n-1 do
begin
T:=0;M:=0;
For j:=i to n do
begin
T:=T+A[j];
M:=M+1;
If (T mod k=0) and (M>Max) then
begin
Max:=M;
S:=i;
End;
End;
End;
If Max=0 then write(fo,'Tep tren khong co day con dai nhat chia het cho k')
Else Write(fo,Max,' ',S);
Close(fo);
End;

BEGIN
CLRSCR;
Doc_tep(a,n,k);
Day_lt(a,n,k);
Readln;
End.

avatar
thanhtruc
Nhiệt tình
Nhiệt tình

Posts : 36
Reputation : -7
Join date : 25/06/2018
Location : TNPPTSBĐ

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by huynhtanluc on Tue Nov 13, 2018 1:42 pm

Code:
Program b5;
uses crt;
type mang=array[1..100] of longint;
var n,i,j,k,s,m,vt,x:longint;
    t1,t2:text;a:mang;

        Procedure doc;
        begin
        assign(t1,'dayso.inp');
        reset(t1);
        readln(t1,n,k);
        for i:=1 to n do
        read(t1,a[i]);
        close(t1);
        end;

        Procedure inra;
        begin
        assign(t2,'dayso.out');
        rewrite(t2);
        m:=0;
        for i:=1 to n-1 do
        for j:=i+1 to n do
        begin
          s:=0;;
        for x:=i to j do s:=s+a[x];
          if (s mod k=0) and (i+j-1>m) then
          begin
          m:=i+j-1;
          vt:=i;
          end;
          end;
        if m=0 then writeln(t2,'Khong co') else
            writeln(t2,m,#32,vt);
        close(t2);
        end;

Begin
        clrscr;
        doc;
        inra;
        readln;
End.

avatar
huynhtanluc
Năng động
Năng động

Posts : 52
Reputation : -14
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Nguyễn Hoàng Nam on Tue Nov 13, 2018 1:43 pm

Code:
Program bai5;
Uses crt;
Type Mang=array[1..100] of integer;
Var a:Mang;
    fi,fo:text;
    n,k:integer;

Procedure doc_du_lieu(Var n,k:integer;Var a:Mang; Var fi:text);
Var i:integer;
Begin
Assign(fi,'DAYSO.INP');
Reset(fi);
Read(fi,n,k);
Readln(fi);
For i:=1 to n do
Readln(fi,a[i]);
Close(fi);
End;

Procedure Tim_day_con(Var n,k:integer;Var a:Mang; Var fo:text);
Var i,j,Tong,Max,M,S:integer;
Begin
Assign(fo,'DAYSO.OUT');
Rewrite(fo);
For i:=1 to n-1 do
Begin
Tong:=0; M:=0;
For j:=i to n do
Begin
Tong:=Tong+a[j]; M:=M+1;
If (Tong mod k=0) and (M>Max) then
Begin
Max:=M;
S:=i;
End;
End;
End;
If Max=0 then write(fo,'dieu kien trong tep khong thoa man ') else write(fo,Max,'  ',S);
Close(fo);
end;

BEGIN
clrscr;
doc_du_lieu(n,k,a,fi);
Tim_day_con(n,k,a,fo);
readln;
end.
avatar
Nguyễn Hoàng Nam
Teen Chính hiệu
Teen Chính hiệu

Posts : 10
Reputation : -1
Join date : 06/11/2018
Age : 13

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by nganvonhat123 on Tue Nov 13, 2018 1:46 pm

Code:
program bai5;

uses crt;
        var fi,fo:text;
        a:array[1..100]of integer;
            i,n,j,d,vt,max,k,s,kq,z:integer;

        procedure nhap;
        begin
                assign(fi,'TICHLN.INP');
                reset(fi);
                readln(fi,n,k);
                for i:=1 to n do readln(fi,a[i]);
                close(fi);
        end;

        procedure tim;
        begin
        assign(fo,'ds.out');
        rewrite(fo);
        max:=0;
        for i:=1 to n-1do
                begin
                        d:=0;s:=0;
                        for j:=i to n do
                                begin
                                        s:=s+a[j];
                                        inc(d);
                                        if (s mod k=0) and (d>max) then
                                        begin max:=d;vt:=i;
                                        end;
                                end;
                            end;
                write(fo,max,' ',vt);


        close(fo);

end;

BEGIN
 clrscr;
 nhap;
 tim;
 readln;
END.

avatar
nganvonhat123
Năng động
Năng động

Posts : 56
Reputation : -23
Join date : 18/06/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Tạ Thúy Phượng on Tue Nov 13, 2018 1:47 pm

code:
uses crt;
var i,n,t,dem,vtd,vtc,j,k,max,d:longint;
a:array[1..100] of longint;
fi,fo:text;
begin
clrscr;
assign(fi,'dayso.inp');
reset(fi);
read(fi,n);
readln(fi,k);
for i:=1 to n do
READln(fi,a[i]);
close(fi);
assign(fo,'dayso.out');
rewrite(fo);
for i:=1 to n do
begin
dem:=0;
t:=0;
for j:=i to n do
begin
t:=t+a[j];
inc(dem);
if (t mod k=0) and (dem>max) then
begin
max:=dem;
vtd:=i;
vtc:=j;
end;
end;
end;

if max=0 then

write( fo,' ko co ')
else
begin
write(fo,vtc-vtd+1,#32);
write(fo,vtd,#32);
end;
close(fo);
readln;
end.
avatar
Tạ Thúy Phượng
Năng động
Năng động

Posts : 53
Reputation : -18
Join date : 18/06/2018
Location : Binh Thuan-Tay Son-Binh Dinh

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by lohan on Tue Nov 13, 2018 2:10 pm

Code:
program bai5;
 uses crt;
 type mang=array[1..100] of integer;
 var fi,fo:text;
    n,k:integer;
    a:mang;
procedure doc(var a:mang;var n,k:integer);
 var i:integer;
 begin
  assign(fi,'dayso.inp');reset(fi);
  read(fi,n,k);readln(fi);
  for i:=1 to n do
  read(fi,a[i]);
  close(fi);
 end;
procedure viet(var a:mang;var n,k:integer);
 var vt,dem,max,i,j,t:integer;
 begin
  assign(fo,'DAYSO.OUT');rewrite(fo);
  for i:=1 to n-1 do
  begin
  t:=0;dem:=0;
  for j:=i to n do
    begin
      t:=t+a[j];
      dem:=dem+1;
      if(t mod k=0) and (dem>max) then
    begin
      max:=dem;
      vt:=i;
 end;
  end;
    end;
 if max=0 then
write(fo,'khong') else write(fo,max,' ',vt);
close(fo);
end;

begin
clrscr;
doc(a,n,k);
viet(a,n,k);
readln;
end.
avatar
lohan
Teen Chính hiệu
Teen Chính hiệu

Posts : 14
Reputation : -3
Join date : 06/11/2018

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho K.

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết