ради интереса написал программку, которая считает минимальное количество ходов.
Перебором.
Эх, 19 можно только за шесть((
Перемножая числа, по сути, складываем степени.
Вот код на сях:
#define len 10
int bestLen=len;
void print(int ar[],int pos){
if (pos<bestLen){
bestLen=pos;
for(int i=0;i<=pos;i++)
printf("%i,",ar[i]);
printf("\n");
}
}
void allVariants(int ar[],int pos,int num){
if (pos>=bestLen) return;
for(int i=pos-1;i>=0;i--)
for(int j=i;j<pos;j++){
int res=ar[i]+ar[j];
if (res>ar[pos-1]){
ar[pos]=res;
if (ar[pos]==num)
print(ar,pos);
if (ar[pos]<num)
allVariants(ar,pos+1,num);
}
}
}
int vect[len];
int main(){
vect[0]=1;
for(int i=2;i<65;i++){
allVariants(vect,1,i);
printf("num = %i,best len = %i \n",i,bestLen);
bestLen=len;
}
getchar();
return 0;
}