各位大佬,怎么让一个数组后一个元素减去前一个元素并将数值赋予给这个数组,就像a[3,8,17]变成a[3,5,9]
差分
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N];
void insert(int l, int r, int c) //差分的核心操作
{
b[l] += c;
b[r + 1] -= c;
}
int main()
{
int n = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
insert(i, i, a[i]); //构建差分数组 等价于b[i]=a[i]-a[i-1];
}
for (int i = 1; i <= n; i++) cout << b[i] << " ";
return 0;
}
循环遍历数组就行了啊
#include <stdio.h>
int main()
{
int a[10] = {12,21,9,88,76,32,29,19,35,44};
int i;
for(i=1;i<10;i++)
{
a[i] = a[i] - a[i-1];
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
public class test {
public static void main(String[] args) {
int[] arr = {3,8,17};
for (int i = arr.length-1; i > 0; i--) {
arr[i] = arr[i]-arr[i-1];
}
for (int j = 0; j < arr.length; j++) {
System.out.println(arr[j]);
}
}
}
自己解决了,好像设置一个新数组就行了...
#include <stdio.h>
int main()
{
int a[10] = { 12,21,9,88,76,32,29,19,35,44 };
int c[10];
int i;
c[0] = a[0];
for (i = 1; i < 10; i++)
c[i] = a[i] - a[i - 1];
for (i = 0; i < 10; i++)
printf("%d\t",a[i]);
printf("\n");
for (i = 0; i < 10; i++)
printf("%d\t", c[i]);
}