Последний раз редактировалось wrest 06.10.2023, 17:17, всего редактировалось 10 раз(а).
Dina98Я для вас написал программу на pari/gp Она состоит из двух фукций. Первая функция step() на вход принимает вектор (массив) чисел, а на выход отдает массив после одного шага. step(v)=my(v1=vecsort(v));v1=apply(x->x-1,v1);for(i=1,#v1,if(v1[i]%2==1,v1[i]=v1[i]+1;return(v1)))Например, не вход даём массив [1,1,1,2] на выходе получаем массив [0,0,0,2] ? step([1,1,1,2]) %358 = [0, 0, 0, 2] ?Функция steps1() принимеет на вход массив, количество шагов, и делает шаги, затем печатает что получилось: (steps1())
Код: steps2(v,n)=my(s0=vecsum(v));if(vecprod(v)%2==1 || vecmax(v)-vecmin(v)>1,print("bad vector ",v);break());print("start:",v," sum:",s0);for(i=1,n,v=vecsort(step(v)));print("finish:",v," final sum:",vecsum(v)," decrease:",s0-vecsum(v)," total steps:",n ) Например, на вход даём массив [11,11,12]и просим сделать 2 шага. ? steps1([11,11,12],2) start:[11, 11, 12] sum:34 finish:[9, 10, 11] final sum:30 decrease:4 total steps:2 ?Функция steps2() дополнительно к тому что делает функция steps1() ещё печатает все промежуточные шаги. (steps2())
Код: steps2(v,n)=my(s0=vecsum(v));if(vecprod(v)%2==1 || vecmax(v)-vecmin(v)>1,print("bad vector ",v);break());print("start:",v," sum:",s0);for(i=1,n,v=vecsort(step(v));print("step ",i," ",v," sum:",vecsum(v)));print("finish:",v," final sum:",vecsum(v)," decrease:",s0-vecsum(v)," total steps:",n ) Например, на вход даём массив [11,11,12] и просим сделать 2 шага. ? steps2([11,11,12],2) start:[11, 11, 12] sum:34 step 1 [10, 10, 12] sum:32 step 2 [9, 10, 11] sum:30 finish:[9, 10, 11] final sum:30 decrease:4 total steps:2 ?pari/gp online есть тут: https://pari.math.u-bordeaux.fr/gp.htmlВы можете "поиграться" разными входными массивами и количеством шагов, "допилить" условия до верных и запостить новые условия. -- 06.10.2023, 17:10 --то числа сортируем, чтобы сохранялся неубывающий порядок. Доказать, что после шагов, , А, это новое. Ортировка у меня предусмотрена была. Смотрим: ? steps2([11,11,12,12,12,12],4) start:[11, 11, 12, 12, 12, 12] sum:70 step 1 [10, 10, 11, 11, 11, 12] sum:65 step 2 [9, 10, 10, 10, 10, 11] sum:60 step 3 [8, 9, 9, 9, 10, 10] sum:55 step 4 [8, 8, 8, 8, 9, 9] sum:50 finish:[8, 8, 8, 8, 9, 9] final sum:50 decrease:20 total steps:4 ?Видим, что два первых числа 11 уменьшились на 3, а два следующих за ними числа 12 -- уменьшились на 4, два же последних числа 12 опять уменьшились 3.
|