Description
赵栋栋最近在研究一个关于数组的一个问题。他有一个数组a1, a2, a3, …, an,初始时每个元素的值都为0。每一步赵栋栋都可以选择一个下标i,将ai, ai + 1, ai + 2, …, an都加1或者减1。他的目标是将这个数组变成另外一个数组b1, b2, b3, …, bn。赵栋栋想要知道他最少需要几步才能完成他的目标?
Input
输入包括多组测试数据。每组测试数据的第一行为一个正整数n(1 <= n <= 20000),代表这个数组的长度。第二行为n个整数b1, b2, b3, …, bn(-10^9 <= bi <= 10^9)。
Output
对于每组测试数据,输出一行,包含一个整数,代表赵栋栋最少需要几步才能将数组a变成数组b
Sample Input
5
1 2 3 4 5
4
1 2 2 1
Sample Output
5
3
思路
遍历每一个数,数arr[i]的加或减的次数是fabs(arr[i]-0) ,其之后的数也要进行相应的改变
代码
#include<stdio.h>
#include<math.h>
#define MAX 20005
int main()
{
int n,arr_1[MAX],arr_2[MAX];
while(~scanf("%d",&n))
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&arr_1[i]);
arr_2[i]=0;
}
int re=0;
for(int i=1;i<=n;i++)
{
if(!arr_1[i]) continue;
else
{
int sign=fabs(arr_1[i]-0);
if(arr_1[i]>=1) sign=-sign;
for(int k=i;k<=n;k++)
{
arr_1[k]+=sign;
}
re+=fabs(sign);
}
}
printf("%d\n",re);
}
return 0;
}