11

مسألة برمجية للتدريب !

  • Rashadoo

لديك عدد n من flash drives ولديك ملف حجمه size , قم بكتابة برنامج يقرأ عدد الفلاشات التي تملكها , ثم يقرأ حجم الملف , ثم يقرأ حجم كل فلاشة , ويجد اقل عدد ممكن من الفلاشات التي اذا دمجتها اتسعت للملف 0.o

مثال :

ادخل عدد فلاشات 3

ادخل حجم الملف : 6

ادخل حجم الفلاشة الاولى : 2

ادخل حجم الفلاشة الثانية : 3

ادخل حجم الفلاشة الثالثة : 2

الخرج سيكون 3


مثال ثاني :

ادخل عدد فلاشات 4

ادخل حجم الملف : 10

ادخل حجم الفلاشة الاولى : 8

ادخل حجم الفلاشة الثانية : 2

ادخل حجم الفلاشة الثالثة : 2

ادخل حجم الفلاشة الرابعة: 3

الخرج سيكون 2


مثال أخير :

ادخل عدد الفلاشات 2

حجم الملف : 5

الاولى : 1

الثانية : 5

الخرج : 1


على اعتبار انه دائما الفلاشات بتقوم بإتساع الملف


cenrak أضف ردا

بالبايثون، البرنامج يعرض أقل عدد مطلوب لحفظ الملف، و أحد المتغيرات يحوي جميع الاحتمالات، solutions

size = 10      # حجم الملف
flash = [2,2,3,8]      # مصفوفة فيها مساحات الأقراص، لا يهم الترتيب

def traverse(l, sum, f):
    if sum >= size and f not in solutions:
        solutions.append(f)
        return
    if l:
        _tmp = l[0] + sum
        traverse(l[1:], _tmp, f + [l[0]])
        traverse(l[1:], sum, f)
        del l[0]

solutions = list()
traverse(flash, 0, [])
m = min([len(x) for x in solutions])
print("Needed drives: {drives}".format(drives=m))

للتجربة: