|
发表于 2020-3-12 15:46:18
|
显示全部楼层
本帖最后由 代号-K 于 2020-3-12 15:49 编辑
经过了几个小时的努力,终于想出了最优的方法
1: 9 = 1 * 9
2: 9009 = 91 * 99
3: 906609 = 913 * 993
4: 98100189 = 9811 * 9999
5: 2811991182 = 34034 * 82623
6 位之后电脑不支持了
- #define BIT_FLAG 5
- #define BIT_MAX (BIT_FLAG+1)*2 - 1
- #define BIT_MIN BIT_FLAG*2 - 1
- #define MAX_NUM 9
- void getHuiWen(int k, int *array, int m, ElementType *result)
- {
- int n = k - 1 - m;
- if(m <= n)
- {
- int i;
- for(i = 1; i <= MAX_NUM; i++)
- {
- array[m] = i;
- array[n] = i;
- int j = 0;
- ElementType sum = 0;
- while( j < k)
- {
- //printf("%d", array[j]);
- sum += array[j]*int(pow(10,k-j-1));
- j++;
- }
- // optimization
- if(*result >= sum)
- {
- if(*result >= sum * 10)
- {
- return;
- }
- continue;
- }
- j = int (pow(10, BIT_FLAG - 1));
- while(j <= int (pow(10, BIT_FLAG) - 1))
- {
- if(sum % j == 0)
- {
- //printf("%d\n", sum);
- int ret;
- ret = (sum / j) / int (pow(10, BIT_FLAG - 1));
- if(ret > 0 && ret < 10)
- {
- ret = sum / j;
- printf("%lld = %d * %d\n", sum, j, ret);
- *result = sum;
- break;
- }
- }
- j++;
- }
- //clear numbers in middle
- if(i == MAX_NUM)
- {
- j = 1;
- while( j < k-1)
- {
- array[j] = 0;
- j++;
- }
- }
- //ecursive
- getHuiWen(k, array, m+1, result);
- }
- }
- }
- int main(int argc, char *argv[])
- {
- int k = BIT_MAX;
- int array[BIT_MAX] = {0};
- ElementType ret = -1;
- for(; k >= BIT_MIN; k--)
- {
- getHuiWen(k, array, 0, &ret);
- }
- //int sum = calculateCircle();
- printf("%lld\n",ret);
- return 0;
- }
复制代码 |
|