Форум » Выполнение и анализ алгоритмов для исполнителей » 12_4978 » Ответить

12_4978

Anna_Lapsha: Есть вопрос: если в задании не сказано "порядок не известен", то можно считать что идут 1-цы потом 2-ки и 3-ки? [pre2] s1=[] k=0 for i in range(1,50): for j in range(1,50): for k in range(1,50): s1='0'+'1'*i+'2'*j+'3'*k+'0' s2=s1 while '00' not in s1: s1=s1.replace('01','21022',1) s1=s1.replace('02','310',1) s1=s1.replace('03','230112',1) if s1.count('1')==104 and s1.count('2')==39 and s1.count('3')==83: k=len(s2) break print(k) [/pre2] Что не так? или [pre2] import itertools k=0 for x in range(1,20): for y in range(1,20): for z in range(1,20): s=x*'1'+y*'2'+z*'3' for i in itertools.permutations(s): s1='0'+''.join(i)+'0' s2=s1 while '00' not in s1: s1=s1.replace('01','21022',1) s1=s1.replace('02','310',1) s1=s1.replace('03','230112',1) if s1.count('1')==104 and s1.count('2')==39 and s1.count('3')==83: k=len(s2) break else: continue print(s2) print(k) [/pre2]

Ответов - 5

Поляков: Anna_Lapsha пишет: если в задании не сказано "порядок не известен", то можно считать что идут 1-цы потом 2-ки и 3-ки? Это не гарантируется. В каких-то задачах при этом может получиться неправильный ответ.

Anna_Lapsha: значит можно использовать перестановки и второй вариан задачи?

Anna_Lapsha: Если по Н. Титов: [pre2] d=0 for i in range(0,100): for j in range(0,100): for k in range(0,100): if (3*i + 1*j + 2*k == 104 and 1*i + 0*j + 1*k == 39 and 7*i + 3*j + 6*k == 83): d=(i+j+k) print(d) [/pre2] Так?


Anna_Lapsha: Что не так? [pre2] d1=d2=d3=0 for i in range(0,100): for j in range(0,100): for k in range(0,100): if (3*i + 1*j + 2*k == 104 and 1*i + 0*j + 1*k == 39 and 7*i + 3*j + 6*k == 83): d1=i d2=j d3=k s='0'+d1*'1'+d2*'2'+d3*'3' s1=s while '00' not in s1: s1=s1.replace('01','21022',1) s1=s1.replace('02','310',1) s1=s1.replace('03','230112',1) if s1.count('1')==104 and s1.count('2')==39 and s1.count('3')==83: print(len(s)) break if len(s)-2==d1+d2+d3: print('верно') [/pre2]

Поляков: Вы транспонировали матрицу. Надо так: [pre2] d=0 for i in range(0,100): for j in range(0,100): for k in range(0,100): if (3*i + 1*j + 7*k == 104 and 1*i + 0*j + 3*k == 39 and 2*i + 1*j + 6*k == 83): d=(i+j+k) d1 = i d2 = j d3 = k print(d) s='0'+d1*'1'+d2*'2'+d3*'3'+'0' s1=s while '00' not in s1: s1=s1.replace('01','21022',1) s1=s1.replace('02','310',1) s1=s1.replace('03','230112',1) if s1.count('1')==104 and s1.count('2')==39 and s1.count('3')==83: print(len(s)) break if len(s)-2==d1+d2+d3: print('верно')[/pre2]



полная версия страницы