December 4, 2020

№6 Masalaning yechilishi va kelgan javoblar tahlili

Yechilishi:

Masala sharti bo’yicha 3 sonda ham bor bo’lgan umumiy raqamlarni o’sish tartibida chiqarish kerak. Bu yerda birxil raqamlar birnechta bo’lsa, ularning faqat bittasi olinadi. Bundan ko’rinadiki, 0 dan 9 gacha raqamlarni, berilgan 3 sonning barchasida bor yoki yo’qligini aniqlaymiz. Agar bor bo’lsa, massivga yozamiz. 3 songa ham 1 dan 10^80 gacha oraliqta sonlar kiritilishi mumkin. Shuning uchun ularni satrga yozamiz.

Bu algoritmni Javada amalga oshirish uchun, 3 sonni String orqali kiritamiz va ushbu 3 son ichidagi 0 dan 9 gacha raqamlar borligini aniqlash uchun esa for sikl operatoridan foydalanamiz. Har bir satr ichida 0 dan 9 gacha raqamlar bor yoki yo’qligini aniqlash uchun, indexOf metodidan foydalanamiz. indexOf metodi satr ichidagi belgi (satr) bor bo’lsa, ushbu belgining (satr) satrdagi joylashgan o’rnini qaytaradi. Bunaqa belgi satrda yo’q bo'lsa -1 qiymatini qaytaradi. Bu yerda satrdagi belgilar 0 dan boshlab raqamlanadi. Masalan, S="123456"; int k = S.indexOf('2'); // k = 1 bo’ladi.

Satrlar bilan ishlovchi metodlar haqida quyidagi saytdan batafsil tanishsangiz bo’ladi: https://metanit.com/java/tutorial/7.2.php

Demak, yuqoridagi metod 0 yoki 0 dan katta qiymat qaytarsa, ushbu belgi satrda bor, aks holda (-1) satrda bunaqa belgi yo’q. Agar satrda bunaqa belgilar bor bo’lsa, massivga yozib boramiz. Bu yerda massiv elementlari soni 10 dan oshmaydi. Chunki 10 lik sanaq tizimida 0…9 dan boshqa raqamlar yo’q. Massivni o’sish tartibida sortirovka qilish shart emas, chunki kichik raqamdan kattasi tomon tekshirib, massivga yozib boramiz.

Yuqoridagi algoritm bo’yicha Javada dasturi:

Kelgan javoblar tahlili:

Saparbaev Anvar yuqoridagi algoritm bo’yicha ishlagan, lekin indexOf metodidan foydalanmaganligi sababli qo’shimcha 3 for sikl operatoridan foydalanishiga to’g’ri kelgan. Lekin dastur hardoyim to’g’ri natija beradi:

Jarilkapov Ajiniyaz, boshqa yo’ldan borgan. Ya’ni birinchi sonning ichidagi raqam boshqa sonda ham borligi aniqlangan, bundan tashqari massiv sortirovka qilingan, natijada 4 qo’shimcha sikl operatoridan foydalanishiga to’g’ri kelgan. Dastur kodi optimal bo’lmasa ham dastur to’g’ri natija beradi:

Yuldashev Quwanishbek, yuqoridagi Ajiniyaz yo’liga o’xshash yo’ldan foydalangan, lekin Python tilinin o’ziga xosligi sabab kod biroz qisqaroq bo’lgan. Dastur to’g’ri natija beradi:

Siz bundan ham yaxshiroq, samaraliroq algoritm tuzsangiz bizga xabar bering!

Bog’lanish uchun: A.Orınbaev

https://t.me/programmalastiriwJava

https://t.me/TITUNFProgDogerek