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
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;
}