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 : 687
Reputation : -10042
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
Teen cá tính
Teen cá tính

Posts : 85
Reputation : -369988
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
Teen cá tính
Teen cá tính

Posts : 85
Reputation : -369988
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 : 75
Reputation : -309991
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.

_________________

My:
- XDA Account
- Blog
- Game

...
avatar
Nguyễn Văn Biên
Recognised Member & Recognised Developer & Protected Member & Super Administrator
Recognised Member & Recognised Developer & Protected Member & Super Administrator

Posts : 220
Reputation : 1129923
Join date : 18/06/2018
Age : 15
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 : 77
Reputation : -339986
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
Nhiệt tình
Nhiệt tình

Posts : 58
Reputation : -329968
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
Nhiệt tình
Nhiệt tình

Posts : 42
Reputation : -1
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 Nguyễn Ngọc Thiên 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
Nguyễn Ngọc Thiên
Teen Chính hiệu
Teen Chính hiệu

Posts : 19
Reputation : -179986
Join date : 06/11/2018
Age : 14
Location : Bình tường, Tây Sơn, 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 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 : 40
Reputation : -119998
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 : 45
Reputation : -189988
Join date : 25/06/2018
Age : 14
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 : 63
Reputation : -299984
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 : 17
Reputation : -159986
Join date : 06/11/2018
Age : 14

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 Khách viếng thăm 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.


Khách viếng thăm
Khách viếng thăm


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 : 66
Reputation : -259993
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 : 21
Reputation : -189985
Join date : 06/11/2018
Age : 14

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


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