189. Shaxmat doskasining birinchi chizig‘ida oq figuralarni (2 ta ot, 2 ta fil, 2 ta ladya, ferz va shoh) nechta usulda qo‘yib chiqish mumkin?
190. Hech bir uchtasi bitta nuqtada yotmaydigan, qavariq n-burchakning ichida yotgan diagonallarning kesishish nuqtalari sonini aniqlang.
QIYIN MASALALAR
191-misol. Foydalanuvchi tomonidan ko‘rsatilgan massiv elementini qo‘shni elementlari bilan ketma-ket o‘rin almashtirish orqali boshiga, ya’ni birinchi o‘ringa o‘tkazing.
#include #include
using namespace std;
int main(int argc, char *argv[])
{
int const n = 10;
int A[n],k,c;
cout << "Massiv:\n";
for (int i = 1; i <= n; i++)
{
A[i] = rand() % 10;
cout << A[i] << " ";
}
cout << endl;
cout << "Nechanchi elementni birinchi o'ringa chiqarish kerak?";
cin >> k;
for (int i = k; i >= 2; --i)
{
c = A[i-1];
A[i - 1] = A[i];
A[i] = c;
}
cout << "Almashgan ko'rinishi:";
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
cout << endl;
}
193-masala. Massiv berilgan. Bunda foydalanuvchi ushbu massivdagi a ga teng elementni, k –joyga ko’chirish kerak.
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
int const n = 10;
int A[n], k, c, k1, a;
cout << "Massiv:\n";
for (int i = 1; i <= n; i++)
{
A[i] = rand() % 10;
cout << A[i] << " ";
}
cout << endl;
cout << "Qaysi element?";
cin >> a;
cout << "Qaysi o'ringa?";
cin >> k;
for (int i = 1; i <= n; i++)
if (A[i] == a)
{
k1 = i;
break;
}
if (k1 < k)
{
for (int i = k1; i <= k - 1; i++)
{
c = A[i + 1];
A[i + 1] = A[i];
A[i] = c;
}
}
else
{
for (int i = k1; i >= k+1; i--)
{
c = A[i - 1];
A[i - 1] = A[i];
A[i] = c;
}
}
cout << "Almashgan ko'rinishi:";
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
cout << endl;
}
194-misol. O‘sish bo‘yicha tartiblangan massivga berilgan sonni shunday joylashtiringki, massiv tartibi buzilmasin.
Matematik tahlil va algoritm tuzish
10 ta sondan iborat bo‘lgan, o‘sish bo‘yicha tartiblangan massiv berilgan bo‘lsin:
12 23 34 45 56 58 78 89 90 98
1 2 3 4 5 6 7 8 9 10 11
Massivga joylashtirish kerak bo‘lgan son 75 bo‘lsin.
Bizga ma’lum bo‘lgan tezkor qidiruv usuli yordamida, bu son massivning 6-nomerdagi elementi, ya’ni 58 dan keyin qo‘yilishi kerakligini aniqlaymiz.
So‘ngra 8- nomerdagi elementdan boshlab, barcha massiv elementlarini 1- element o‘ngga ko‘chirish kerak (o‘rin almashtirish jarayonini biz oldin ham bajargan edik, lekin bu masalada elementning 11 nomeridagi qiymati saqlanib qolishi to‘g‘risida qayg‘urish kerak emas, chunki uning o‘zi yo‘q, aniqrog‘i u nolga teng, shuning uchun o‘rin almashtirishni oddiy ko‘chirish bilan almashtirish mumkin, ya’ni 11 nomerdagi elementga 10 nomerdagi element qiymatini, 10 ga esa 9 nikini va h.k berib qo‘yish mumkin).
Undan keyin esa 7- nomerdagi element o‘rniga berilgan sonni joylashtirish kerak.
Buning uchun esa massivni tariflash paytida, massiv 1 ta elementga uzun bo‘lib qolishini hisobga olish, ya’ni massivni berilgan konstantaga nisbatan 1 taga katta deb ta’riflash kerakligi bizga ravshan.
#include #include
using namespace std;
int main(int argc, char *argv[])
{
int const n = 10;
int A[n], a, k=0, c;
cout << "Kiritiladigan element: a="; cin >> a;
for (int i = 1; i <= n - 1; i++)
{
cin >> A[i];
if (a >= A[i])
k = i + 1;
}
if (k == 0)
k = 1;
for (int i = n; i >= k + 1; i--)
{
A[i] = A[i - 1];
}
A[k] = a;
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
cout << endl;
}
195-misol. O‘sish bo‘yicha tartiblangan massivga tartib qoidasini buzmagan holda berilgan sonni kiriting. Oldingi masaladagi dasturni shunday o‘zgartiringki, tartiblangan massivga boshqa sonli massiv qo‘shilsin, yangi massiv esa tartiblangan bo‘lsin.
#include #include
using namespace std;
int main(int argc, char *argv[])
{
int const n = 10, m=3;
int A[n+m], B[m], a, k=0, c, j=1;
for (int i = 1; i <= m; i++)
{
cout << "B="; cin >> B[i];
}
for (int i = 1; i <= n; i++)
{
cin >> A[i];
if (A[i] <= B[1])
k = i + 1;
}
if (k == 0)
k = 1;
for (int i = n+m; i >= k + m; i--)
{
A[i] = A[i - m];
}
for (int i = k; i <= k + m-1; i++)
{
A[i] = B[j];
j++;
}
for (int i = 1; i <= n+m; i++)
cout << A[i] << " ";
cout << endl;
}
196-misol. Chap tomonida o‘zidan kichik elementlar, o‘ng tomonda esa o‘zidan kattalari joylashgan “o‘rta” elementni topish dasturini tuzing. (Elementlarning o‘rnini almashtirish protsedurasi va “o‘rta” elementni aniqlash protsedurasidan foydalaning).
197-misol. Endi oldimizga qo‘yilgan maqsad shundan iboratki, biz “o‘rta” dasturini shunday o‘zgartirishimiz kerakki, u nafaqat “o‘rta” elementni aniqlasin, balki shu usuldan foydalangan holda sonli massivni tartiblasin.
198. Bir o‘lchovli massivda 0,1,2 elementlari bor. Ularni birinchi uchta o‘ringa o‘sib borish tartibida ko‘chiring.
#include using namespace std;
void main()
{
const int n = 10;
int A[n], c;
for (int i = 1; i <= n; i++)
{
A[i] = rand() % 10;
cout << A[i] << " ";
}
for (int i= 1; i <= n; i++)
{
if (A[i] == 0)
{
c = A[1];
A[1] = A[i];
A[i] = c;
}
if (A[i] == 1)
{
c = A[2];
A[2] = A[i];
A[i] = c;
}
if (A[i] == 2)
{
c = A[3];
A[3] = A[i];
A[i] = c;
}
}
cout << "Natija\n";
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
return;
}
199. Inson 1 dan 1000 gacha bo‘lgan sonlarning qaysi birini o‘ylaganini 10 ta savol yordamida aniqlovchi dasturni tuzing. Har bir savol “O‘ylangan son haqiqatdan ham k dan kattami?” ko‘rinishida bo‘lishi kerak. Bunda k aniq son. Insonning javoblari - bu 1 (Ha) va 0 (Yo‘q). Ikkiga bo‘lish g‘oyasini qo‘llang (“bo‘lib yubor va hukmronlik qil”).
200. Ikkita tartiblangan a(n) va b(m) massiv berilgan. Ushbu massiv elementlaridan tartiblangan c(n+m) massiv hosil qiling, ya’ni ikkita tariblangan massivni bitta tartiblangan massivga birlashtiring.
201. Massivni nolga teng elementlarini tashlab yuborgan holda ixchamlang. Nollar massivning oxirgi joylariga qo‘yilsin.
#include
using namespace std;
void main()
{
const int n = 75;
int A[n], i=1, c;
for (int i = 1; i <= n; i++)
{
A[i] = rand() % 10;
cout << A[i] << " ";
}
for (int j = 1; j <= n; j++)
{
if (A[j] == 0)
{
for (int i = j; i <= n - 1; i++)
{
c = A[i];
A[i] = A[i + 1];
A[i + 1] = c;
}
}
}
cout << "\n Natija:\n";
for (int i = 1; i <= n; i++)
cout << A[i] << " ";
}
202. Tasodifiy sonlar funksiyasi yordamida tuzilgan ikkita tartiblangan bir o‘lchovli massivlarda o‘xshash elementlarning sonini aniqlang. (Massivni tasodifiy sonlar funksiyasi yordamida tuzish, kamayish bo‘yicha tartiblash, so‘ngra esa solishtirish kerak).
#include using namespace std;
void sort(int n, int *A)
{
int k;
for (int i = 1; i <= n - 1; i++) //Massivni saralash jarayoni
for (int j = 1; j <= n - 1; j++)
if (A[j]>A[j + 1])
{
k = A[j];
A[j] = A[j + 1];
A[j + 1] = k;
}
return;
}
int control(int *A, int *B, int n)
{
int S = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if(A[i] == B[j])
S++;
}
return S;
}
void main()
{
const int n = 500;
int A[n], B[n], S1;
for (int i = 1; i <= n; i++)
{
A[i] = rand() % 100;
B[i] = rand() % 100;
}
cout << "Massiv\n";
for (int i = 1; i <= n; i++)
{
cout << A[i] << " " << B[i]< }
sort(n, A);
sort(n, B);
S1 = control(A, B, n);
cout << "Natija: " << S1 << endl;
}
203. A[N,M] massiv berilgan. Barcha mavjud to‘g‘ri burchakli qism massivlar bo‘yicha to‘g‘ri burchakli qism massivdagi elementlarning maksimal yig‘indisini topish kerak.