تالار گفتمان مانشت
سوال فناوری اطلاعات سال ۸۸ - نسخه‌ی قابل چاپ

سوال فناوری اطلاعات سال ۸۸ - sos006 - 01 آذر ۱۳۸۹ ۱۱:۵۸ ب.ظ

این تست لرشد IT-88 دولتی بوده.لطفا کمک کنید.سوال رو به این صورت مطرح میکنم که:
یک لیست پیوندی یک طرفه حلقوی داریم با ۱۰۰۰ عنصر و با مقادیر داده ای ۱و۲و...و۱۰۰۰ که L اشاره گری است به ابتدای لیست.خروجی کد زیر چیست؟
الف )۱ ب)۳۲۷ ج)۹۷۷ د)۱۰۰۰
کد:
Int  s(List *L)
{
If(L^.next==L)return L^.data;
L^.next=L^.next^.next;
Return  (L^.next);
}
لازم به ذکر است که جواب برابر ۹۷۷ است. چرا؟

RE: جواب این تست چرا میشه ۹۷۷؟ - grayman - 02 آذر ۱۳۸۹ ۰۳:۱۳ ق.ظ

سلام
لطفا دقت کن تو طرح سوالت یه جا اشتباه نوشتی و کد درست اینه:
کد:
Int s(List *L)
{
    If(L^.next==L)return L^.data;
    L^.next=L^.next^.next;
    Return s(L^.next);
}
و اما جواب
اولین بار که تابع روی کل لیست اجرا میشه‌، گره های زوج از لیست خارج میشن پس قطعا ۱۰۰۰ جواب سوال نیست:
کد:
۱->3->5->7->9->11->13->->->->->995->997->999->1
بار دوم اعداد ۸۲و۷و۱۳و... خارج میشن یعنی به طور کلی اعداد ۴n-1 از لیست خارج میشن. پس گزینه ۲ هم غلطه چون ۱-۸۲*۴ = ۳۲۷
کد:
۱->5->7->9->13->17->->->->989->993->997->1
بار سوم اعداد ۵و۱۳و۲۱و۲۹و... و در حالت کلی ۸n-3 حذف میشن و داریم:
کد:
۱->9->17->25->33->41->->->->->->977->985->993->1
بار چهارم اعداد ۹/۲۵و۴۱و کلا ۱۶n-7 حذف میشن. تو این مرحله ۹۸۵ هم حذف میشه پس ۹۷۷ به ۹۹۳ اشاره میکنه که ۹۹۳ هم به از روی ۱ رد شده و به ۱۷ اشاره می کنه. عدد ۱ هم از گزینه‌ها حذف میشه. جواب میشه ۹۷۷

جواب این تست چرا میشه ۹۷۷؟ - ف.ش - ۲۲ بهمن ۱۳۸۹ ۱۲:۱۳ ق.ظ

طبق راه حلی که دوستان اینجا مطرح کردن جواب این سوال میشه ۹۷۷

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


چون عدد ۱۰۰۰ یعنی تعداد گره‌ها رو اگه به صورت دودویی بنویسیم میشه ۱۱۱۱۱۰۱۰۰۰
و اگه یه شیفت چرخشی به چپ بدیم میشه ۱۱۱۱۰۱۰۰۰۱ یعنی ۹۷۷
خداییش راهه جالبیه اگه نه آدم بیچاره میشد تا ۹۷۷ رو بدست بیاره.

RE: جواب این تست چرا میشه ۹۷۷؟ - ف.ش - ۲۲ بهمن ۱۳۸۹ ۰۲:۱۱ ق.ظ

(۲۲ بهمن ۱۳۸۹ ۰۱:۴۴ ق.ظ)ali نوشته شده توسط:  در این روش آیا فرقی میکنه که اشاره گر به اول لیست اشاره بکنه یا به آخر لیست.؟
اگه منظورتون اینه که اگه به ۱۰۰۰ اشاره میکرد فرق میکرد یا نه به نظر من فرق میکرد
اما به نظر من میشه یه جورایی تبدیل کرد چون اگه رو ۱ بود ۹۷۷ میموند حالا هم که روی ۱۰۰۰ هست حالا هم ۹۷۶امین نود بعد از ۱۰۰۰ میمونه یعنی ۹۷۶ و به همین ترتیب
چون اعدادی که روی نودها نوشته که تاثیری روی حذف شدن و نشدنشون نداره اون اشاره گره که تغییر میکنه.
البته این نظر منه!