小明现在正在玩数字游戏。 小明具有n个正整数:X1,X2,…, Xn。他可以根据需要多次执行以下操作:选择两个不同的索引和j,使xi>Xij 成立,然后应用赋值x1=Xi-Xj。目标是使所有数字的总和尽可能小。请帮助小明查找这笔最低金额。 Input 第一行包含一个整数n (2≤n≤100)。然后第二行包含n个整数:X1,X_2,…, Xn(1≤xi1S10o)。 Output 输出一个整数-所需的最小和。用C语言写代码
时间: 2024-03-10 18:46:36 浏览: 223
```
#include <stdio.h>
int main() {
int n, x[100], i, j, min, temp;
// 读入数据
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &x[i]);
}
// 模拟操作
while (1) {
min = 0;
for (i = 1; i < n; i++) {
if (x[i] < x[min]) {
min = i;
}
}
if (x[min] >= x[0]) {
break;
}
for (i = 0; i < n; i++) {
if (i != min) {
temp = x[i] % x[min];
if (temp == 0) {
temp = x[min];
}
x[i] = temp;
}
}
}
// 计算总和
int sum = 0;
for (i = 0; i < n; i++) {
sum += x[i];
}
// 输出结果
printf("%d\n", sum);
return 0;
}
```
思路解析:
对于每一次操作,我们需要找到当前数组中最小的数,然后将其他数都对它取模,再将它们赋值为模的结果。
这样做的原因是,我们希望在每一次操作中,尽量减小数组中的最小值,而对其他数取模可以保证它们始终小于最小值,从而保证了最小值的不断减小。最终当最小值大于等于数组中的最大值时,操作结束。
最后,我们将所有数的和输出即可。
阅读全文