题目表述
把数列中一个数加上 d 算作一次操作,求最少几次操作能把这个数列变为递增数列。(2<=n<=2000)
解题思路
n个数要两两比较需要比较n-1次,且每次比较都要判断后一个是否比前一个大,如果不是,后一个就要加到刚好比前一个大(这样比较过的就肯定是递增数列了)。最后输出累加的个数。
#include <stdio.h>
int main(void) {
int n, d, book = 0;
int i, arr[2001];//数组下标用常数
scanf("%d %d", &n, &d);
for (i = 1; i <= n; i++)
scanf("%d", &arr[i]);
for (i = 1; i < n; i++) {
if (arr[i + 1] <= arr[i]) {
book += (arr[i] - arr[i + 1]) / d + 1;//注意这一行和下一行顺序不能互换
arr[i + 1] += ((arr[i] - arr[i + 1]) / d + 1) * d;
}
}
printf("%d", book);
return 0;
}