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.
1: while pos(#32,s)>0 do delete(s,pos(#32,s),1);
Còn kiểm tra palindom thì đầu tiên cho kiểm tra là true, chạy for từ đầu đến length div 2, nếu s[i] khác s[length-i+1] thì kiểm tra false, còn lại tự biết.
2: Các trường hợp sai
-Không có chấm hoặc nhiều hơn 1 chấm.
-1 trong 2 bên dấu chấm không phải là số hoặc 1 trong 2 bên không có số.
-dấu + hoặc - đặt sai vị trí (ko đặt đầu xâu, bên phải chữ e, giữa số mũ).
-Xuất hiện 1 kí tự khác e, +, -, số, khoảng cách.
-Xuất hiện khoảng cách giữa xâu
(Mình nghĩ vậy)
3. S:=lowercase(s); đưa s về xâu thường.
Chèn khoảng cách (#32) vô đầu xâu cho dễ xử lí: gọi s là xâu nhập vào, i là biến chạy, nếu s[i+1] không phải khoảng cách và s[i] là khoảng cách thì tăng đếm và upcase s[i+1] lên, đếm là số in ra
Cuối cùng là xóa khoảng cách thừa bằng:
While pos(#32#32,s)>0 do deletes(s,pos(#32#33,s),1);
If s[1]=#32 then delete(s,1,1);
If s[length(s)]=#32 then delete(s,length(s),1);
(#32 là dấu khoảng cách theo bảng mã ascii)
uses crt;
const finp='Bai1.inp';
fout='Bai1.out';
type mangc=array[1..10000] of char;
mangl=array[1..10000] of longint;
var f:text;
ch:mangc; a:mangl;
n:longint;
procedure doc;
var i:longint;
begin
assign(f,finp);
reset(f);
readln(f,n);
for i:=1 to n do read(f,ch[i]);
close(f);
end;
procedure ghi;
begin
assign(f,fout);
rewrite(f);
end;
procedure tim;
var i,j,d,k,l:longint;
begin
for i:=n-2 downto 1 do
begin
a[i]:=1;
d:=0;
for j:=i+1 to n do
begin
l:=a[j];
if ch[i]=ch[j] then a[j]:=d+2
else if a[j-1]>a[j] then a[j]:=a[j-1];
d:=l;
end;
end;
end;
procedure xuly;
var i:longint;
begin
fillchar(a,sizeof(a),0);
if n=1 then a[n]:=1
else begin
a[n-1]:=1;
a[n]:=ord(ch[n]=ch[n-1])+1;
end;
if n>2 then tim;
write(f,n-a[n]);
end;
begin
doc;
ghi;
xuly;
close(f);
end.
ai có thể giải thích cho mình bài này đc không
nhất là cái "procedure tim" và mục đích của mảng số nguyên a
mk cảm ơn nhiều
tổ ong
var S,N:int64;
f:text;
Begin
assign(f,'BEEHIVE.INP');
reset(f);
readln(f,N);
close(f);
if N=1 then S:=1
else S:=1+6*((N-1)*N div 2);
assign(f,'BEEHIVE.OUT');
rewrite(f);
writeln(f,S);
close(f);
end.
ốc sên
uses crt;
const
fi='SNAIL.INP';
fo='SNAIL.OUT';
Var a,b,v,x:longint;
f:text;
Begin
clrscr;
assign(f,fi);reset(f);
readln(f,a,b,v);
close(f);
x:=(V-a)div(a-b)+1;
if (V-a)mod(a-b)<>0 then inc(x);
assign(f,fo);rewrite(f);
writeln(f,x);
close(f);
end.
trên là 1 cách giải xin mọi người cho cách khác
var n,m,i,j,p,q,k,tam:byte;
a:array[1..100,1..100] of integer;
b:array[1..10000] of integer;
f:text;
function tong(x,y:integer):integer;
var i,j:integer;
begin
tong:=0;
for i:=x to x+p-1 do
for j:=y to y+q-1 do
tong:=tong+a[i,j];
exit(tong);
end;
begin
assign(f,'HCN.inp');reset(f);
readln(f,n,m,p,q);
for i:=1 to n do
begin
for j:=1 to m do read(f,a[i,j]);
readln(f);
end;
close(f);
assign(f,'HCN.out');rewrite(f);
k:=0;
for i:=1 to n-q+1 do
begin
for j:=1 to m-p+1 do
begin
inc(k);
b[k]:=tong(i,j);
end;
end;
for i:=1 to k-1 do
for j:=k downto i+1 do
if b[j]>b[j-1] then
begin
tam:=b[j];
b[j]:=b[j-1];
b[j-1]:=tam;
end;
writeln(f,b[1]+b[2]);
close(f);
readln;
end.
![]()
const fi='nix.inp';
fo='nix.out';
var
f:text;
j,i,n,max:0..100;
a,b,l,m: array [0..101] of integer;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:= 1 to n do
read(f,a[i]);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
for i:= 0 to n do
l[i] := 1;
for i:= 1 to n do
for j:= i to n do
if (a[j] > a[i] ) and (l[j] < l[i] + 1 ) then
begin
l[j] := l[i] + 1;
m[j]:= i;
end;
max:=0;
for i:= 1 to n do
if l[i] > max then
begin
j:=i;
max:=l[i];
end;
while m[j] <> 0 do
begin
l[j]:=-l[j];
j:=m[j];
end;
l[j]:=-l[j];
for i:= 1 to n do
if l[i] < 0 then write(f,i,' ');
close(f);
end;
BEGIN
ip;
out;
END.
cau1
uses crt;
const
fi='CAU1.inp';
fn='CAU1.out';
var n: string;
f:text;
m,i,a,tong: integer;
BEGIN
clrscr;
assign(f,fi);reset(f);
read(f,n);
read(f,m);
close(f);
assign(f,fn);rewrite(f);
for i:= length(n) downto length(n)-m+1 do
begin
val(n[i],a);
tong:=tong+a;
end;
write(f,tong);
close(f);
readln;
END.
cau3
uses crt;
const
fi='CAU1.inp';
fn='CAU1.out';
var n: string;
f:text;
m,i,a,tong: integer;
BEGIN
clrscr;
assign(f,fi);reset(f);
read(f,n);
read(f,m);
close(f);
assign(f,fn);rewrite(f);
for i:= length(n) downto length(n)-m+1 do
begin
val(n[i],a);
tong:=tong+a;
end;
write(f,tong);
close(f);
readln;
END.
Câu 2:
*Ý tưởng :
+ Ý 1:
- Bạn không cần chạy đến vô hạn như đề cho đầu , bạn chỉ cần 1 vòng for chạy đến k là được bởi vì nó lấy kí tự thứ k.
- Bạn cho 1 vòng for chạy đến k và chuyển dãy số đó sang xâu và cho 1 biến đếm vào
- Nếu biến đếm bằng với k thì write(s[d]);
+ Ý 2:
- Các số có 1 chữ số chỉ có từ 1 đến 9. Nên nếu d<9 thì write(s[d]);
- Nếu mà d>9 và d là số lẻ thì write(s[d-1],s[d]) ngược là nếu d là số chẵn thì write(s[d],s[d+1]);
Đây là ý tưởng , nếu bạn không hiểu chỗ nào cứ hỏi mình , bạn làm theo ý tưởng mình xem nhé. Nếu không được mình sẽ gửi bài làm của mình cho bạn xem.
Lời giải:
Mình gửi đáp án luôn nha, dạo này mình hơi bận nên sợ không gửi được cho bạn.
program hotrotinhoc;
const fi='cau2.inp';
fo='cau2.out';
var f: text;
s,st: string;
d: integer;
i,k: longint;
procedure ip;
begin
assign(f,fi);
reset(f);
read(f,k);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
d:=0;
for i:=1 to k do
begin
str(i,s);
st:=st+s;
inc(d);
end;
if d=k then write(st[d],' ');
if d<9 then write(st[d]);
if (d>9) and (d mod 2=1) then write(st[d-1],st[d]);
if (d>9) and (d mod 2=0) then write(st[d],st[d+1]);
close(f);
end;
begin
ip;
out;
end.
lệ ơi câu 2 làm kiểu gì
cảm ơn
nayfcauaj làm sai chỗ
sai write(st[d-1],st[d]); đúng write(f,st[d-1],st[d]);
sai thứ 2: bài cậu khai báo string cho st nên khi cộng xâu st tối đa chỉ được 255 số. ví dụ nếu nhập số thứ 300 bài ko ra kết quả
const
fi='cau2.inp';
fo='cau2.out';
var f:text;
s,st:string;
d:integer;
i,k:longint;
procedure ip;
begin
assign(f,fi);reset(f);
read(f,k);
close(f);
end;
procedure out;
begin
assign(f,fo);rewrite(f);
d:=0;
for i:=1 to k do
begin
str(i,s);
st:=st+s;
inc(d);
end;
if d=k then write(st[d],'');
if d<9 then write(st[d]);
if (d>9) and (d mod 2=1) then write(f,st[d-1],st[d]);
if (d>9) and (d mod 2=0) then write(f,st[d],st[d+1]);
close(f);
end;
begin
ip;
out;
end.
chỉ ra 12 thôi
Ở if d=k then write(f,st[d],' ');
Ở if d<9 then write(f,st[d]);
Mình làm ở màn hình nên quên sửa cái này.
Nếu thế thì bạn sử dụng kiểu char cũng được, không bắt buộc phải dùng string. Nếu bạn sử dụng Free Pascal thì khai báo là ansistring.
ok
tự hỏi tự trả lời luôn à