Viết giải thuật tính trung bình cộng của một dãy bất kỳ có n số và đánh giá độ phức tạp của thuật toán
viết giải thuật tính trung bình cộng của các số chia hết cho 3 và đánh giá độ phức tạp của nó
Biết cách phân tích, đánh giá độ phức tạp thuật toán là kĩ năng quan trọng của người thiết kế thuật toán và chương trình. Các quy tắc đơn giản tính độ phức tạp thời gian mang lại cho em điều gì khi đánh giá thuật toán?
Đánh giá được mức đơn giản của thuật toán, từ đó tìm ra được cách giải nhanh nhất.
Áp dụng phương pháp tinh chỉnh từng bước, xây dựng thuật toán để nhập vào một dãy số nguyên, đếm xem trong dãy có bao nhiêu số nguyên tố. Số lượng các số nguyên tố là số chẵn hay lẻ? Đánh giá độ phức tạp của thuật toán xây dựng được.
#include <bits/stdc++.h>
using namespace std;
long long n,i,dem,a[10000];
//chuongtrinhcon
bool ktnt(long long n)
{
for (int i=2; i*i<=n; i++)
if (n%i==0) return(false);
return(true);
}
//chuongtrinhchinh
int main()
{
cin>>n;
dem=0;
for (i=1; i<=n; i++)
{
cin>>a[i];
if (a[i]>1 && (ktnt(a[i])==true)) dem++;
}
cout<<dem;
return 0;
}
Viết thuật toán giải bài toán: Cho số nguyên dương N và dãy số A có N phần tử A1, A2, …, AN. Hãy tính trung bình cộng các số lẻ trong dãy A.
#include <bits/stdc++.h>
using namespace std;
long long n,i,x,t,dem;
int main()
{
cin>>n;
dem=0;
t=0;
for (i=1; i<=n; i++)
{
cin>>x;
if (x%2!=0)
{
dem++;
t=t+x;
}
}
double s=t*1.0/dem*1.0;
cout<<fixed<<setprecision(2)<<s;
return 0;
}
Thuật toán liệt kê:
Bước 1: Nhập n và dãy A1,A2,..,An
Bước 2: TB←0; i←1; d←0;
Bước 3: Nếu i>n thì in ra TB/d và kết thúc
Bước 4: Nếu Ai mod 2=1 thì TB←TB+Ai và d←d+1;
Bước 5: i←i+1, quay lại bước 3
Cho dãy A gồm N số nguyên a1,a2 ,…aN. Hãy cho biết tổng tất cả các số trong dãy A và giá trị trung bình cộng của các số trong dãy A?
Hãy xác định bài toán và mô tả thuật toán giải các bài toán
#include <bits/stdc++.h>
using namespace std;
double x,t;
int n,i;
int main()
{
cin>>n;
t=0;
for (i=1; i<=n; i++)
{
cin>>x;
t=t+x;
}
cout<<"tong cac so la:"<<fixed<<setprecision(2)<<t<<endl;
cout<<"trung binh la:"<<fixed<<setprecision(2)<<t/(n*1.0);
return 0;
}
Y tưởng : xét từng số hạng trong dãy nếu số hạng > 0 thì xếp vào một biến tổng rồi chia cho số hàng đã xếp được
Input : Dãy A gồm N số nguyên a1....aN;
Output : Trung bình cộng của các số dương;
B1 : Nhập N số nguyên a1.... aN;
B2 : TB <--- 0, dem <---- 0, i <---- 1, Tong <--- 0;
B3 : Nếu a[i] > 0 thì Tong <--- TB + a[i];
B4 : dem <--- dem + 1;
B5 : Nếu i > N thì đưa ra màn hình kết quả TB = Tong/Dem rồi kết thúc chương trình;
B 6 : i <--- i + 1 rồi quay lại B3;
program Trung_Binh_Cong;
uses crt;
var t1,t2,t3,t4,tong: real;
begin
clrscr;
write('nhap so thu nhat =');
readln(t1);
write('nhap so thu hai =');
readln(t2);
write('nhap so thu ba =');
readln(t3);
write('nhap so thu tu =');
readln(t4);
tong:=t1+t2+t3+t4;
write('Trung binh cong cua 4 so = ' ,tong div 4);
readln;
end.
Program TB_Cong_4_So;
uses crt;
Var a, b, c, d: real;
Begin
Clrscr;
Write('Nhap so thu nhat:');readln(a);
Write('Nhap so thu hai:');readln(b);
Write('Nhap so thu ba:');readln(c);
Write('Nhap so thu tu:');readln(d);
Writeln('Trung binh cong: ',(a+b+c+d)/4);
Readln;
End.
Bước 1: Nhập a,b,c,d
Bước 2: t←(a+b+c+d)/4;
Bước 3: Xuất t
Bước 4: Kết thúc
Trình bày thuật toán: Cho số nguyên dương N và dãy D gồm N số thực d1, d2, ... , dn là điểm trung bình . Em hãy cho biết tổng số học sinh có điểm dưới trung bình. Mô phỏng thuật toán với điểm bất kì của 8 học sinh
#include <bits/stdc++.h>
using namespace std;
long long n,i,dem;
double d[10000];
int main()
{
cin>>n;
for (i=1; i<=n; i++)
cin>>d[i];
dem=0;
for (i=1; i<=n; i++)
if (d[i]<5) dem++;
cout<<dem;
return 0;
}
Trong tin học, độ hiệu quả của một thuật toán tỉ lệ thuận với thời gian thực thi chương trình tương ứng và được tính theo công thức \(E\left(n\right)=\frac{n}{P\left(n\right)}\)với \(n\)là số lượng dữ liệu đưa vào và \(P\left(n\right)\)là độ phức tạp của một thuật toán ứng với giá trị \(n\).Biết rằng một thuật toán có độ phức tạp là \(P\left(n\right)=log_2n\)và khi \(n=300\)thì để chạy nó, máy tính mất 0.02s.Hỏi khi \(n=90000\)thì mất bao lâu để thực thi chương trình tương ứng?
tính E(300)=300/log2(300), E(90000)=90000/log2(90000)
Vì độ hiệu quả tỉ lệ thuận với thời gian thực hiện
nên ta có tỉ số 0,02/E(300)=x/E(90000) (x là giá trị cần tìm).
Từ đó tính được x=3