WY66. 塔
描述
输入描述
第一行两个数n,k (1 <= n <= 100, 0 <= k <= 1000)表示塔的数量以及最多操作的次数。输出描述
第一行两个数s, m,表示最小的不稳定值和操作次数(m <= k)示例1
输入:
3 2 5 8 5
输出:
0 2 2 1 2 3
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-09-15
#include<stdio.h> int main() { int n,k; scanf("%d %d",&n,&k); int sz[n]; int szk[k][2]; int s,m=0; for(int i=0;i<n;i++) { scanf("%d",&sz[i]); } for(int j=0;j<=k;j++) { int max = sz[0]; int min = sz[0]; int maxi = 0; int mini = 0; for(int i=1;i<n;i++) { if(sz[i]>max) { max = sz[i]; maxi = i; } if(sz[i]<min) { min = sz[i]; mini = i; } } s = max-min; if(s == 0 ||s==1) break; szk[j][0] = maxi; szk[j][1] = mini; sz[maxi]--; sz[mini]++; m++; } if(m>k) m--; printf("%d %d\n",s,m); for(int i=0;i<m;i++) { printf("%d %d\n",szk[i][0]+1,szk[i][1]+1); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2020-12-14
#include<stdio.h> int main(void) { int n,k,i; scanf("%d %d",&n,&k); int height[100]; for(int i=0;i<n;i++) { scanf("%d",&height[i]); } int b[k][2]; int heightest=0; int lowest=10000; int h_num; int l_num; int r=0; while(heightest!=lowest&&r<=k) { heightest=0; lowest=10000; for(int i=0;i<n;i++) { if(height[i]>heightest) { heightest=height[i]; h_num=i; } if(height[i]<lowest) { lowest=height[i]; l_num=i; } } height[h_num]--; height[l_num]++; b[r][0]=h_num+1; b[r][1]=l_num+1; r++; } r--; printf("%d %d\n",heightest-lowest,r); for(int i=0;i<r;i++) { printf("%d %d\n",b[i][0],b[i][1]); } return 0; }