Bài 96 : Viết chương trình con tính tổng các phần tử là số nguyên tố, có số lần xuất hiện ít nhất là 2 của mảng a[n], lưu ý mỗi phần tử chỉ tính tổng một lần

Tải code tại đây
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144

/* Bài 96 đề cương ôn tập trường CNTP : Viết chương trình con tính tổng các phần tử là số nguyên tố, có số lần xuất hiện ít nhất là 2 của mảng a[n], lưu ý mỗi phần tử chỉ tính tổng một lần.
	Ví dụ: cho mảng A như sau:
	2	-3	3	2	3	5	7	7	4	3
	Kết quả: trả về của chương trình con là: 2+3+7=12.
	Chú ý: Cho hàm kiểm tra số nguyên tố: int ktsnt(int n). 651.cpp 
*/

/* Ý Tưởng để xuất ra các giá trị phân biệt trong mảng :Ta sắp xếp mảng tăng dần (hay giảm dần),sau đó đem phần tử đầu tiên (sau khi đã thực hiện sắp xếp) làm gốc,ta in ra trước phần tử a[0].Sau đó cho vòng lặp i chạy từ 1 đến <n . Đặt điều kiện nếu a[i] khác a[i-1].Nếu thỏa => in ra a[i] và biến đếm ban đầu khởi tạo bằng 1 (tại vì đã lấy phần tử a[0] làm gốc) bây giờ tiếp tục cộng tăng thêm 1 đơn vị.Cứ thế lặp lại cho đến hết . */

/* Ý Tưởng để tính tần suất xuất hiện của các giá trị phân biệt : Ta khai báo một mảng b dùng để lưu các giá trị phân biệt vừa tìm được của mảng a ở câu trên vào.Khởi tạo biến dem1=0.Sau đó lần lượt đem so sánh từng phần tử của mảng b với mảng a .Nếu bằng nhau => biến dem1 tăng thêm 1 đơn vị. Cứ lặp lại liên tục cho đến phần tử cuối cùng của mảng b . */

/* Ý Tưởng để giải quyết bài toán : Sau khi ta đã thực hiện đc 2 bước trên thì chỉ cần đặt điều kiện những phần tử có số lần xuất hiện ít nhất là 2 lần và kiểm tra xem nó có phải là số nguyên tố hay không ? Cuối cùng đi tính yêu cầu của bài toán . */

// Các thư viện sử dụng trong chương trình .
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define MAX 100

// Hàm Nhập Mảng .
void NhapMang(int a[],int &n)
{
	quaylai:printf("\nNhap vao so luong phan tu cua mang:n=");
	scanf("%d",&n);
	if(n<1||n>MAX)
	{
		printf("\nSo ban nhap vao khong hop le!Xin vui long nhap lai!");
		goto quaylai;
	}
	for(int i=0;i<n;i++)
	{
		printf("\nNhap vao a[%d]=",i);
		scanf("%d",&a[i]);
	}
}

// Hàm Xuất Mảng .
void XuatMang(int a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("%4d",a[i]);
	}
}

// Hàm Hoán Vị .
void HoanVi(int &x,int &y)
{
	int temp=x;
	x=y;
	y=temp;
}

// Hàm Sắp Xếp Mảng Tăng Dần Bằng Thuật Toán Interchange Sort .
void SapXepMangTangDan(int a[],int n)
{
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i]>a[j])
			{
				HoanVi(a[i],a[j]);
			}
		}
	}
}

// Hàm xử lý dữ liệu bài toán .
void XuLyDuLieu(int a[],int b[],int n)
{
	int dem=1,j=1,f;
	int tong=0;
	printf("\nCac Gia Tri Phan Biet Trong Mang La:");
	printf("%4d",a[0]); // In ra trước phần tử gốc a[0] .
	for(int i=1;i<n;i++)
	{
		b[0]=a[0]; // Gán phần tử đầu tiên của mảng b là phần tử gốc giá trị phân biệt đầu tiên .
		if(a[i]!=a[i-1])
		{
			printf("%4d",a[i]); // In ra các giá trị phân biệt trong mảng a .
			dem++; // Đếm số lượng các giá trị phân biệt .
			b[j++]=a[i]; // Đưa các giá trị phân biệt trong mảng a vào mảng b .
		}
	}
	printf("\n");
	printf("\n");
	printf("\nCac phan tu la so nguyen to va co so lan xuat hien it nhat la 2 lan la:");
	for(j=0;j<dem;j++)
	{
		int dem1=0; // Khởi tạo biến dem1=0 .
		for(int i=0;i<n;i++)
		{
			if(b[j]==a[i])
			{
				dem1++; 
			}
		}
		// Liệt kê ra những phần tử phân biệt trong mảng và có số lần xuất hiện >=2 lần .
		if(dem1>=2)
		{
			// Kiểm tra số nguyên tố .
			f=1; // Khởi tạo giá trị biến đầu tiên là 1 tượng trưng cho giá trị đúng (toán rời rạc ^^) .
			if(b[j]<2)
			{
				f=0; // Những số nguyên tố là những số >=2 => những số <2 ko phải là nguyên tố cho nên ở đây ta khởi tạo điều kiện là 0 tức ngầm hiểu là sai .
			}
			for(int k=2;k<=b[j]/2;k++)
			{
				if(b[j]%k==0)
				{
					f=0; // Nếu chia hết => không phải là số nguyên tố => khởi tạo điều kiện là 0 .
				}
			}
			if(f==1) // gọi lại điều kiện đúng . Lúc này các số trong mảng là các số nguyên tố có số lần xuất hiện >=2 lần . => thực hiện công việc tính toán mà đề bài ra .
			{
				printf("%4d",b[j]); // Liệt kê ra các phần tử thỏa điều kiện .
				tong+=b[j]; // Tính tổng các phần tử đó .
			}
		}
	}
	printf("\n");
	printf("\nTong cac phan tu thoa la:%d",tong);
}

// Hàm Chính .
void main()
{
	int a[MAX],b[MAX],n,tieptuc;
	quaylai:NhapMang(a,n);
	printf("\n>>>>>>>>>>>>Mang Vua Nhap La:<<<<<<<<<<<<<<<<<<<\n");
	XuatMang(a,n);
	printf("\n");
	SapXepMangTangDan(a,n);
	XuLyDuLieu(a,b,n);
	printf("\n");
	printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
	tieptuc=getch();
	if(tieptuc=='c'||tieptuc=='C')
	{
		system("cls"); 
		goto quaylai;
	}
}

Nhận xét

Bài đăng phổ biến từ blog này

Bài 17 : Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số

Bài Tập Cây Nhị Phân Tìm Kiếm

Bài 22 : Viết chương trình nhập vào số nguyên dương n gồm 5 chữ số,kiểm tra xem các chữ số n có phải là số đối xứng hay không ?