最简单逻辑求解
每走一步,最高-1,最矮+1,k步之后的数组是结果。
--------------------------------------------------------------------------------------------
#include<stdio.h>int main()
{
int n, k, tmp, s = 0, m;
scanf("%d %d", &n, &k);
int sz[n], szk[k][2];
for (int i = 0; i < n; i++) {
scanf("%d", &sz[i]);
}
for (int j = 0; j <= k; j++) {
int max = sz[0], min = sz[0], maxi = 0, mini = 0;
for (int i = 1; i < n; i++) {
if (max < sz[i]) { max = sz[i]; maxi = i; }
if (min > sz[i]) { min = sz[i]; mini = i; }
}
m = max - min;
if (sz[maxi] == sz[mini]) { break; }
if (sz[maxi] - sz[mini] == 1) { break; }
szk[j][0] = maxi;
szk[j][1] = mini;
sz[maxi]--;
sz[mini]++;
s++;
}
if (s > k) { s--; }
printf("%d %d\n", m, s);
for (int i = 0; i <s; i++) {
printf("%d %d\n", szk[i][0] + 1, szk[i][1] + 1);
}
}