Increase and Copy (codeforce)解法及c语言代码
思路:
转化:最少次数达到n–>什么样的加法乘法组合能更快得到更大的数字
- 首先:先加再乘,一定比先乘再加,能更快得到更大的数字
- 假设前面全都+1,然后开始复制—加i次,乘j次,得到的sum = (1+i)*(1+j)
- (1+i)*(1+j) = n, 使得i+j最小,三角不等式: 1+i=1+j=sqrt(n)时最小
- 有一些数需要最后再补,在这个过程中间合适位置加一次复制即可
//Increase and Copy.c
#include <stdio.h>
#include <math.h>
void minMoves(int n)