وظیفه
N عدد داده شده است. دومین عنصر بزرگ را در یک دنباله پیدا کنید.
این مشکل دو تفسیر را امکان پذیر می کند.
به عنوان مثال، اگر مجموعهای از اعداد به ما داده شود:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\)، پاسخ چیست؟ ?
تحت "دومین عنصر بزرگ" یا به سادگی "دومین حداکثر" را می توان به صورت زیر درک کرد:
1) مقداری که اگر همه مقادیر را به ترتیب غیر کاهشی مرتب کنیم (مرتب سازی کنیم) در مکان ماقبل آخر قرار می گیرد (هر یک بزرگتر یا برابر با قبلی است). سپس برای مجموعه اعداد در نظر گرفته شده، پاسخ مقدار 35 خواهد بود؛
2) مقدار عنصر که فقط از حداکثر بیشتر است. سپس پاسخ 20 است.
اگر تنها یک عنصر حداکثر در مجموعه اعداد وجود داشته باشد (همه بقیه کمتر هستند)، هر دو تفسیر یکسان است و پاسخ برای هر دو مورد یکسان خواهد بود، در غیر این صورت پاسخ متفاوت خواهد بود.
مورد اول را در نظر بگیرید (الگوریتم را در
شبه کد).
برای یافتن پاسخ از دو متغیر استفاده می کنیم:
1)
maximum1
- حداکثر مقدار (اول حداکثر)؛
2)
maximum2
- حداکثر دوم (پاسخ ما).
اگر محدوده تغییر مقادیر مشخص باشد، به عنوان مقادیر اولیه، عددی را می گیریم که آشکارا کمتر از حد پایین محدوده است (به عنوان مثال، با محدوده ای از
-1000
تا
1000
- عدد را بگیرید
-1001
)
اگر محدوده مقادیر ناشناخته است، می توانید دو عدد ورودی اول را در مقادیر اولیه متغیرهای
max1
و
max2
بنویسید و سپس آنها را با هم مقایسه کنید. دو متغیر
<پیش>
ورودی N //تعداد اعداد
ورودی a، b
max1 = a
max2 = b
اگر b > الف، سپس
max1 = b
max2 = a
در مرحله بعد، ما همه عناصر دیگر را در نظر می گیریم (2 مورد اول قبلاً مشاهده شده است، بنابراین از 3 شروع می کنیم)
<پیش>
nc برای i از 3 تا n
ورودی الف
اگر > حداکثر1 //مقداری بزرگتر از حداکثر1 وجود داشت
که
max2 = max1 //اول سابق بالاتر دوم می شود
max1 = a // عنصر جدید اولین حداکثر خواهد بود
در غیر این صورت
//عنصر بعدی بیش از max1 نباشد
// باید با مقدار حداکثر 2 مقایسه شود
اگر > حداکثر 2
که
max2 = a //آن را به عنوان مقدار جدید max2 در نظر بگیرید
// max1 در این مورد تغییر نمی کند
همه
همه
kts
سعی کنید خودتان این الگوریتم را پیاده سازی کنید.