C语言编码问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 21:11:26
设有一个整形数组 A[0..N-1];存放的元素为 0~N-1 (1<N<=10)之间的整数,且 A[i]≠A[j](i≠j)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下:
A[0]编码为0;
A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数 (i=1,2,…,N-1)
例如上面数组 A的编码为:B=(0,0,0,3,1,2)
若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。

输入:
推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组)
数组个数
数组或数组编码元素

输出:
数组编码、或数组本身(元素之间以空格分隔)

例子:
输入
1↵
6↵
4 3 0 5 1 2↵
输出
0 0 0 3 1 2↵

#include "stdafx.h"
#include "stdio.h"
#define N 10
int main(int argc, char* argv[])
{
//freopen("F:\\qc.txt","r",stdin);
int mark=0,n=0,i,j,a[N]={0},b[N]={0},count=0;
scanf("%d" ,&mark);
scanf("%d" ,&n);
if(mark==1)/*求编码*/
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
b[0]=0;
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
if(a[i]>a[j])
count++;
b[i]=count;
count=0;

}
for(i=0;i<n-1;i++)
printf("%d ",b[i]);
printf("%d\n",b[n-1]);
}
if(mark==2) /*求原数据*/
{
int t[N]; /*t用来记录所有可能的原数据的值*/
for(i=0;i<n;i++)
{ scanf("