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.

16 tháng 1 2020

Khi bạn làm bài tập lập trình mà có các cụm từ khóa sau:

  • Sắp xếp dãy số tự nhiên tăng dần/giảm dần
  • Sắp xếp mảng số thực tăng dần/ giảm dần
  • Sắp xếp mảng 1 chiều các số tự nhiên tăng/giảm dần

Thì cả 3 đề bài này đều là bài toán sắp xếp dữ liệu trên mảng 1 chiều. Khi nhắc tới “dãy số” thì bạn phải nghĩ ngay tới mảng 1 chiều. Dưới đây là 1 số lưu ý tham khảo trước khi tiếp tục đọc bài viết này:

  • Bạn cần có kiến thức về mảng 1 chiều để có thể hiểu bài viết này, xem tại: Mảng 1 chiều
  • Có rất nhiều thuật toán sắp xếp khác nhau, tham khảo thêm tại: thuật toán sắp xếp
  • Tổng hợp bài tập mảng 1 chiều có lời giải: Bài tập mảng 1 chiều có lời giải

2. Sắp xếp dãy số giảm dần

Trong code mà mình cung cấp dưới đây thì mình sẽ dùng thuật toán sắp xếp chọn – một thuật toán sắp xếp dễ hiểu và dễ cài đặt nhất.

Xem hình dưới đây để hiểu ý tưởng sắp xếp, xem chi tiết tại bài thuật toán sắp xếp chọn

Sắp xếp dãy số tăng dần

Code sắp xếp mảng/ dãy số giảm dần với C/C++:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> int main(){ int a[100]; int n; printf("\nNhap so luong phan tu n = "); do{ scanf("%d", &n); if(n <= 0){ printf("\nNhap lai n = "); } }while(n <= 0); for(int i = 0; i < n; i++){ printf("\nNhap a[%d] = ",i); scanf("%d", &a[i]); } // Sap xep dung thuat toan sap xep chon int tg; for(int i = 0; i < n - 1; i++){ for(int j = i + 1; j < n; j++){ if(a[i] < a[j]){ // Hoan vi 2 so a[i] va a[j] tg = a[i]; a[i] = a[j]; a[j] = tg; } } } printf("\nMang da sap xep la: "); for(int i = 0; i < n; i++){ printf("%5d", a[i]); } }

Chạy thử:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Nhap so luong phan tu n = 5 Nhap a[0] = 1 Nhap a[1] = 3 Nhap a[2] = 2 Nhap a[3] = 4 Nhap a[4] = 5 Mang da sap xep la: 5 4 3 2 1

3. Sắp xếp dãy số tăng dần

Việc sắp xếp dãy số tăng dần chỉ khác sắp xếp giảm dần duy nhât ở bước kiểm tra điều kiện để hoán vị.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> int main(){ int a[100]; int n; printf("\nNhap so luong phan tu n = "); do{ scanf("%d", &n); if(n <= 0){ printf("\nNhap lai n = "); } }while(n <= 0); for(int i = 0; i < n; i++){ printf("\nNhap a[%d] = ",i); scanf("%d", &a[i]); } // Sap xep dung thuat toan sap xep chon int tg; for(int i = 0; i < n - 1; i++){ for(int j = i + 1; j < n; j++){ if(a[i] > a[j]){ // Hoan vi 2 so a[i] va a[j] tg = a[i]; a[i] = a[j]; a[j] = tg; } } } printf("\nMang da sap xep la: "); for(int i = 0; i < n; i++){ printf("%5d", a[i]); } }

Kết quả chạy thử:

0 1 2 3 4 5 6 7 8 9 10 11 12 Nhap a[0] = 1 Nhap a[1] = 2 Nhap a[2] = 4 Nhap a[3] = 3 Nhap a[4] = 5 Mang da sap xep la: 1 2 3 4 5

4. Sắp xếp dãy số tăng, giảm dần với hàm

Việc dùng hàm sẽ giúp code của chúng ta rõ ràng, sạch sẽ và cũng dễ quản lý, nâng cấp. Với bài toán này, chúng ta có thể viết 4 hàm riêng biệt sau:

  • void NhapMang(int a[], int n)
  • void XuatMang(int a[], int n)
  • void TangDan(int a[], int n)
  • void GiamDan(int a[], int n)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #include <stdio.h> void NhapMang(int a[], int n){ for(int i = 0; i < n; i++){ printf("\nNhap a[%d] = ",i); scanf("%d", &a[i]); } } void XuatMang(int a[], int n){ for(int i = 0; i < n; i++){ printf("%5d", a[i]); } } void TangDan(int a[], int n){ int tg; for(int i = 0; i < n - 1; i++){ for(int j = i + 1; j < n; j++){ if(a[i] > a[j]){ // Hoan vi 2 so a[i] va a[j] tg = a[i]; a[i] = a[j]; a[j] = tg; } } } } void GiamDan(int a[], int n){ int tg; for(int i = 0; i < n - 1; i++){ for(int j = i + 1; j < n; j++){ if(a[i] < a[j]){ // Hoan vi 2 so a[i] va a[j] tg = a[i]; a[i] = a[j]; a[j] = tg; } } } } int main(){ int a[100]; int n; printf("\nNhap so luong phan tu n = "); do{ scanf("%d", &n); if(n <= 0){ printf("\nNhap lai n = "); } }while(n <= 0); NhapMang(a, n); printf("\nMang vua nhap la: "); XuatMang(a, n); // Sap xep tang dan: TangDan(a, n); printf("\nMang sap xep tang dan la: "); XuatMang(a, n); // Sap xep giam dan: GiamDan(a, n); printf("\nMang sap xep giam dan la: "); XuatMang(a, n); }

Kết quả chạy chương trình

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Nhap so luong phan tu n = 5 Nhap a[0] = 1 Nhap a[1] = 4 Nhap a[2] = 3 Nhap a[3] = 2 Nhap a[4] = 5 Mang vua nhap la: 1 4 3 2 5 Mang sap xep tang dan la: 1 2 3 4 5 Mang sap xep giam dan la: 5 4 3 2 1

Chú ý:

  • Với số thực hay kiểu ký tự(char) bạn cũng làm tương tự. Chỉ cần sửa kiểu dữ liệu của mảng, cách nhập, xuất. Còn phần thuật toán sắp xếp vẫn giữ nguyên.
  • Đây là thuật toán sắp xếp đơn giản và dễ cài đặt nhất, bạn nên thử cài đặt bằng những thuật toán sắp xếp khác.
7 tháng 2 2023

 

7 tháng 3 2023

Program HOC24;

var i,n: byte;

a: array[1..100] of integer;

tbc: real;

t: longint;

begin

write('Nhap N: '); readln(n);

for i:=1 to n do 

begin

write('Nhap so thu ',i,': '); readln(a[i]);

tbc:=0; t:=0;

end;

for i:=1 to n do

begin

tbc:=tbc+a[i];

if a[i] mod 2=1 then t:=t+a[i];

end;

writeln('Trung binh cong cac phan tu la: ',btc/n:5:2);

write('Tong cac so le la :',t);

readln

end.

bài 2: bạn nên nhớ nếu khai báo như vậy thì chắc chắn pascal nó sẽ báo lỗi trùng biến a

phải khai báo biến khác a sau khi đã khai báo a là array và ngược lại

Câu 2:

uses crt;
var a,d,e,f:array[1..100]of integer;
c,b,n,i,kt,dem1,dem2,dem:integer;
begin
clrscr;
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
{----------------------------xu-ly--------------------------}
write('nhap b='); readln(b);
write('nhap c='); readln(c);
dem:=0; dem1:=0; dem2:=0;
for i:=1 to n do
begin
kt:=0;
if (a[i]>=b) and (a[i]<=c) then
begin
kt:=1;
inc(dem);
d[dem]:=a[i];
end;
if a[i]<b then
begin
kt:=2;
dem1:=dem1+1;
e[dem1]:=a[i];
end;
if kt=0 then
begin
inc(dem2);
f[dem2]:=a[i];
end;
end;
for i:=1 to dem do
write(d[i]:4);
for i:=1 to dem1 do
write(e[i]:4);
for i:=1 to dem2 do
write(f[i]:4);
readln;
end.

12 tháng 3 2023

Program HOC24;

var i,n: integer;

t: longint;

a: array[1..1000] of integer;

begin

write('Nhap n '); readln(n);

for i:=1 to n do 

begin

write('a[',i,']= '); readln(a[i]);

end;

t:=0;

for i:=1 to n do t:=t+a[i];

write('Ket qua la: ',t);

readln

end.

Bài 3:

uses crt;

var i:integer;

{------------------chuong-trinh-con-kiem-tra-so-nguyen-to----------------------}

function ktnt(x:integer):boolean;

var kt:boolean;

i:integer;

begin

kt:=true;

for i:=2 to x-1 do

  if x mod i=0 then kt:=false;

if kt=true then ktnt:=true

else ktnt:=false;

end;

{-------------------------chuong-trinh-chinh----------------------------}

begin

clrscr;

for i:=2 to 9999 do 

  if (ktnt(i)=true) and (ktnt(i+2)=true) then 

begin

writeln(i,',',i+2);

delay(500);

end;

readln;

end.

Bài 4: 

uses crt;

var a,b,c,kt:integer;

begin

clrscr;

write('Nhap ngay:'); readln(a);

write('Nhap thang:'); readln(b);

write('Nhap nam:'); readln(c);

kt:=0;

if (b=1) and (0<a) and (a<=31) then kt:=1;

if (b=2) and (0<a) and (a<=28) then kt:=1;

if (b=2) and (0<a) and (a<=29) and (c mod 4=0) then kt:=1;

if (b=3) and (0<a) and (a<=31) then kt:=1;

if (b=4) and (0<a) and (a<=30) then kt:=1;

if (b=5) and (0<a) and (a<=31) then kt:=1;

if (b=6) and (0<a) and (a<=30) then kt:=1;

if (b=7) and (0<a) and (a<=31) then kt:=1;

if (b=8) and (0<a) and (a<=31) then kt:=1;

if (b=9) and (0<a) and (a<=30) then kt:=1;

if (b=10) and (0<a) and (a<=31) then kt:=1;

if (b=11) and (0<a) and (a<=30) then kt:=1;

if (b=12) and (0<a) and (a<=31) then kt:=1;

if kt=0 then writeln('Khong hop le')

else writeln('Hop le');

readln;

end.

20 tháng 11 2023

def xoa_phan_tu_chia_het_cho_3(arr):
    return [x for x in arr if x % 3 != 0]

# Nhập số phần tử của dãy
n = int(input())

# Nhập dãy số nguyên
day_so = list(map(int, input().split()))

# Xóa các phần tử chia hết cho 3
ket_qua = xoa_phan_tu_chia_het_cho_3(day_so)

# In ra dãy sau khi xóa
print(*ket_qua)