program HSGKhH_Bai1_2010;
type
    arr =
Array[1..100000] of double;
var
    N:longint;
    a:arr;
    i:integer;
   
isTang,isGiam:boolean;
    x:double;
begin
    write('N=');
    readln(N);
    isTang:=true;
    isGiam:=true;
    for i:=1 to N
do
        begin
           
write('a[',i,']=');
           
readln(a[i]);
            if(i=1)
then
               
begin
                   
x := a[i];
                   
continue;
               
end;
           
if(isTang) then
                begin
                   
if(x>a[i]) then
                       
isTang:=false
                   
else
                       
x:=a[i];
               
end;
           
if(isGiam) then
               
begin
                   
if(x<a[i]) then
                       
isGiam:=false
                   
else
                       
x:=a[i];
               
end;
        end;
    if(isTang) then
        write('day
tang')
    else
        if(isGiam)
then
           
write('day giam')
        else
           
write('khong tang khong giam');
    readln;
end.
Bài 2:
program HSGKhH_Bai2_2010;
type
arr = array[1..100000] of double;
var
N,K,dem,i:integer;
x:double;
isok:boolean;
a:arr;
begin
dem:=0;
isok := false;
write('N=');readln(N);
for i:=1 to N do
begin
write('a[',i,']=');
readln(a[i]);
end;
write('K=');readln(K);
for i:=1 to N do
begin
if(a[i]>0) then inc(dem);
if(a[i]<0) then
begin
if(dem=K) then
begin
isok := true;
break;
end;
dem :=0;
end;
end;
if isok then
write('co')
else
write('khong');
readln;
end.
Bài 3: nhận xét rất đơn giản,
Bài 2:
program HSGKhH_Bai2_2010;
type
arr = array[1..100000] of double;
var
N,K,dem,i:integer;
x:double;
isok:boolean;
a:arr;
begin
dem:=0;
isok := false;
write('N=');readln(N);
for i:=1 to N do
begin
write('a[',i,']=');
readln(a[i]);
end;
write('K=');readln(K);
for i:=1 to N do
begin
if(a[i]>0) then inc(dem);
if(a[i]<0) then
begin
if(dem=K) then
begin
isok := true;
break;
end;
dem :=0;
end;
end;
if isok then
write('co')
else
write('khong');
readln;
end.
Bài 3: nhận xét rất đơn giản,
- dòng và cột đều lẻ điền số 1, dòng và cột đều lẻ điền số -1, còn lại là số 0.
- nếu là ma trận vuông thì tổng giá trị luôn là 0.
solution (free pascal):
program HSGKhH_Bai3_2010;
var
    N,i,j:longint;
    a:array[1..201,1..201]of longint;
begin
    write('N='); readln(N);
    fillchar(a,sizeof(a),0);
    for i:=1 to N do
    for j:=1 to N do
        if(odd(i) and odd(j)) then
            a[i,j]:=1
        else if(not odd(i) and not odd(j)) then
            a[i,j]:=-1;
    for i:=1 to N do
        begin
            for j:=1 to N do write(a[i,j],' ');
            writeln;
        end;
    readln;
end.
Bài 4:
Solution bằng ngôn ngữ C++ cài trên IDE DevC:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int f[256];
int trace[256];
bool IsPalin(int jj,int ii);
int main()
{
freopen("TEST.INP","r",stdin);
freopen("TEST.OUT","w",stdout);
cin >> s;
//swap
char c;
for(int i=0,j=s.size()-1; i<j;)
{
c=s[i];
s[i]=s[j];
s[j]=c;
i++,j--;
}
//cout << s;
f[0]=1;
for(int i=1; i<s.size(); i++)
{
f[i]=i+1;
trace[i]=i;
for(int j=0;j<=i;j++)
if(IsPalin(j,i))
{
if(j==0)
{
f[i]=1;
trace[i]=0;
continue;
}
if(f[i]>f[j-1]+1)
{
f[i] = f[j-1]+1;
trace[i]=j;
}
}
}
cout << f[s.size()-1] << endl;
for(int i=s.size()-1; i>=0;)
{
for(int j=trace[i];j<=i;j++)
cout << s[j];
cout << endl;
i = trace[i]-1;
}
return 0;
}
bool IsPalin(int jj,int ii)
{
int jjj=jj,iii=ii;
while(jjj<iii)
{
if(s[jjj]!=s[iii]) return false;
jjj++;
iii--;
}
return true;
}
Bài 4:
Solution bằng ngôn ngữ C++ cài trên IDE DevC:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int f[256];
int trace[256];
bool IsPalin(int jj,int ii);
int main()
{
freopen("TEST.INP","r",stdin);
freopen("TEST.OUT","w",stdout);
cin >> s;
//swap
char c;
for(int i=0,j=s.size()-1; i<j;)
{
c=s[i];
s[i]=s[j];
s[j]=c;
i++,j--;
}
//cout << s;
f[0]=1;
for(int i=1; i<s.size(); i++)
{
f[i]=i+1;
trace[i]=i;
for(int j=0;j<=i;j++)
if(IsPalin(j,i))
{
if(j==0)
{
f[i]=1;
trace[i]=0;
continue;
}
if(f[i]>f[j-1]+1)
{
f[i] = f[j-1]+1;
trace[i]=j;
}
}
}
cout << f[s.size()-1] << endl;
for(int i=s.size()-1; i>=0;)
{
for(int j=trace[i];j<=i;j++)
cout << s[j];
cout << endl;
i = trace[i]-1;
}
return 0;
}
bool IsPalin(int jj,int ii)
{
int jjj=jj,iii=ii;
while(jjj<iii)
{
if(s[jjj]!=s[iii]) return false;
jjj++;
iii--;
}
return true;
}
 
trong lời giải trên vừa kết hợp việc nhập liệu vừa kiểm tra có phải là dãy tăng không, vừa kiểm tra có là dãy giảm không, nếu không thỏa mãn hai trường hợp kia thì là trường hợp còn lại.
Trả lờiXóa