题目描述
差分编码是音乐数据中常用的一种编码形式,它利用两个相连信号之间差别不大的特性,从而使得不用记录原数据,只需要记录与之前相差的数据,从而达到缩短编码总长度的目的。
比如有数据序列S=(100,101,100),其差分编码序列为(100,1,−1)。原序列需要使用3个字节,一共24比特表示;差分编码第一元素为原值,需要1个字节,后两个为差分值,其值域为[−1,1],差分值使用等长编码,每个最少需要使用2个比特表示,所以最小可以只用12个比特表示。
现在给你一个原数据的序列,请计算出差分序列。
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
以后每两行一个样例,样例第一行是一个整数n(1≤n≤1000),表示数据的个数。样例的第二行为n个正整数si(0≤si≤255)。
输出
每行输出一个样例的结果,为n个整数,每个整数之间用一个空格隔开。
样例输入
2 3 100 101 102 3 100 101 99
样例输出
100 1 1 100 1 -2
这题还挺简单的,就是输出后一个数减前一个数的差,也没有溢出或者超时什么的坑点。
#include<stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int arr[1000],str[1004];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
str[0]=arr[0];
for(int i=1;i<n;i++)
{
str[i]=arr[i]-arr[i-1];
}
for(int i=0;i<n-1;i++)
{
printf("%d ",str[i]);
}
printf("%d\n",str[n-1]);
}
return 0;
}