用c编程由1-9组成的数字串(长度不超过200),将m(m<=20)个+插入数字串,使算式表达式的值最小
时间: 2023-06-15 19:05:23 浏览: 77
用c语言编写的表达式求值程序
这道题可以使用贪心算法,思路如下:
1. 找到第一个数字串中最小的数字,将其和+号组成一个新的数字串,插入到第一个数字串中。
2. 重复以上步骤m次,每次找到新数字串中最小的数字,将其和+号组成一个新的数字串,插入到第一个数字串中。
3. 最终得到的数字串就是最小的表达式。
代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 210
#define INF 0x3f3f3f3f
char s[MAX_LEN]; // 数字串
int main() {
int m, len, i, j, k, min_val, min_pos;
scanf("%s%d", s, &m);
len = strlen(s);
for (i = 0; i < m; ++i) {
min_val = INF;
for (j = 0; j < len - 1; ++j) {
if (s[j] != '+') {
for (k = j + 1; k < len; ++k) {
if (s[k] != '+') {
int val = (s[j] - '0') * 10 + (s[k] - '0');
if (val < min_val) {
min_val = val;
min_pos = j;
}
} else {
break;
}
}
}
}
// 将新数字串插入到原数字串中
len += 2;
for (j = len - 1; j > min_pos + 1; --j) {
s[j] = s[j - 2];
}
s[min_pos] = min_val / 10 + '0';
s[min_pos + 1] = min_val % 10 + '0';
s[min_pos + 2] = '+';
}
printf("%s\n", s);
return 0;
}
```
注意,本题的数字串长度不超过200,需要开到210,以保证插入m个+号后不会超过数组长度。
阅读全文