Matritsaning satrlari va ustunlari bilan ishlash. Misol. Matritsaning har bir satri elementlari yi’gindilari va har bir ustun elementlari yig’indilaridan massivlar hosil qiling va ularni ekranga chiqaring.
int n, m;
cout << "n=";
cin >> n;
cout << "m=";
cin >> m;
int a[n+1][m+1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin>>a[i][j];
}
}
int s_r[n+1];//Satrlar yi'gindilarini saqlovchi massiv
int s_c[m+1];//Ustunlar yig'indisini saqlovchi massiv
//Satrlar va ustunlar yig'indilarining qiymatlarini nolga tenglaymiz
for (int i = 1; i <= n; i++) {
s_r[i] = 0;
}
for (int i = 1; i <= m; i++) {
s_c[i] = 0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
s_r[i] += a[i][j]; // a[i][j] element i-satr yig'indisini oshiradi
s_c[j] += a[i][j]; // a[i][j] element j-ustun yig'indisini oshiradi
}
}
cout << "Qatorlar yig'indilari : ";
for (int i = 1; i <= n; i++) {
cout << s_r[i] << " ";
}
cout << endl;
cout << "Ustunlar yig'indilari : ";
for (int i = 1; i <= m; i++) {
cout << s_c[i] << " ";
}
}
Matritsaning egar nuqtasi Matritsaning egar nuqtasi deb bir vaqtning o’zida o’zining satrida minimal va o’zining ustunida maksimal bo’lgan elementga aytamiz.
Masala: Sizga n ta satr va m ta ustundan iborat matritsa berilgan. Ushbu matritsaning egar nuqtasi uning satrida ham minimal, ham ustunida maksimal bo'lgan elementdir.
Berilgan matritsaning egar nuqtalari sonini toping.
Yechim: Egar nuqtalari sonini hisoblash uchun matritsaning har bir ustunidagi va har bir satrdagi minimal va maksimallarning mos kelishini hisoblashingiz kerak.
O(n2) uchun yechim
Buning uchun biz har bir maksimalni har bir minimal bilan solishtiramiz va ularning tasodiflarini hisoblaymiz. Bunday holda, algoritm O(n2) da ishlaydi, bu erda n massiv uzunliklarining eng kattasidir. Bu shuni anglatadiki, yetarlicha katta massivlar bilan dastur qabul qilib bo'lmaydigan darajada uzoq vaqtda ishlaydi. Ammo bu yondashuvni amalga oshirish juda oddiy va tushunarli.
Masala dasturi:
#include #define N 750
using namespace std;
int main() {
int n, m, MIN[N], MAX[N];
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int input;
cin >> input;
if (i == 0) MAX[j] = input;
else if (MAX[j] < input) MAX[j] = input;
if (j == 0) MIN[i] = input;
else if (MIN[i] > input) MIN[i] = input;
}
}
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (MIN[i] == MAX[j]) count++;
cout << count;
return 0;
}