2019.6.24-2019.6.28(实训数据结构)3.数组编码求解问题
作者:互联网
2019.6.24-2019.6.28(实训数据结构) 书籍:《数据结构项目实训教程》 赵君喆,戴文华
5.5数组与广义表项目实训拓展
设有一个数组 A:array[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]编码wei:在A[0],A[1],...,A[i-1]中比A[i]的值小的个数(i=1,2,...N-1)。
则数组A的编码为B=(0,0,0,3,1,2)。
要求如下:
给出数组A,利用C求解A的编码。
给出数组A的编码后,求出A中的原数据。
#include<iostream> #include<cstdio> #include<conio.h> #include<stdlib.h> #include<time.h> using namespace std; int a[12],b[12]; void swap(int * x,int * y){ int temp; temp = *x; *x = *y; *y = temp; } void fun(int N){ srand(time(NULL)); int i; for(i=0; i<N; ++i) a[i]=i; for(i=N-1; i>=1; --i) swap(&a[i], &a[rand()%i]); printf("产生的随机数组是:\n"); for(i=0; i<N; ++i) printf("%d ",a[i]); cout<<endl; } int main(){ int n,m; printf("请输入n:\n"); cin>>n; fun(n); for(int i=0;i<n;i++){ int count=0; for(int j=0;j<i;j++){ if(a[j]<a[i]){ count++; } } b[i]=count; } printf("数组的编码分别是:\n"); for(int i=0;i<n;i++){ cout<<b[i]<<" "; } //解码 int d[n],f[n]; int flag=0; //printf("\n请输入数组的编码:\n"); /*for(int i=0;i<n;i++){ cin>>m; c[i]=m; }*/ for(int i=0;i<n;i++){ d[i]=i; } for(int i=n-1;i>=0;i--){ int count=0; for(int j=0;j<n;j++){ if(d[j]==-1){ count--; } else if(b[i]==count){ f[flag]=d[j]; flag++; d[j]=-1; break; } count++; } } printf("\n请数组编码解码为:\n"); for(int i=flag-1;i>=0;i--){ cout<<f[i]<<" "; } return 0; }
标签:24,编码,int,2019.6,28,实训,数组,include 来源: https://www.cnblogs.com/zhying99/p/11083822.html