D. 实验7_21_编码、解码数组

设有一个整型数组a中存放n个互不相同的整数,a中元素取值范围为0到n-1。a数组的编码定义如下:a[0]的编码为0,放入b[0];ai的编码为在a[0]、a[1]、…、a[i-1]中比a[i]的值小的数的个数,放入b[i]。例如:a[6]={4,3,0,5,1,2}时,则b[6]={0,0,0,3,1,2}。你有两个任务,任务一是编码,即已知n与数组a,求数组b;任务二是解码,即已知n与数组b,求数组a。
输入与输出要求:首先输入两个整数n和flag。n代表数组元素的个数(1<=n<=100),flag代表任务类型(flag=1代表编码任务,flag=2代表解码任务)。然后是n个整数,当flag=1时,这n个数即代表数组a的内容;当flag=2时,这n个数即代表数组b的内容。
输出n个整数,当flag=1时即为编码后数组b的内容,当flag=2时,即为解码后数组a的内容。每个整数用空格分开,最后一个整数后是换行符。
程序运行效果:
Sample 1:
5↙
1↙
2 1 3 0 4↙
0 0 2 0 4
Sample 2:
8↙
2↙
0 1 2 0 1 1 4 5↙
3 6 7 0 2 1 4 5

#include int minCount(int a[], int len); int main() { int n, flag, a[100], i, j, b[100] = { 0 }; scanf("%d", &n); scanf("%d", &flag); if (flag == 1) { for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 1; i < n; i++) { b[i] = minCount(a, i); } for (i = 0; i < n; i++) printf("%d ", b[i]); printf("\n"); } else if (flag == 2) { for (i = 0; i < n; i++) scanf("%d", &b[i]); a[n - 1] = b[n - 1]; int num[100] = { 0 },k,count; for (k = 0; k < n-1; k++) num[k + 1] = num[k] + 1; for (k = 0; k < n; k++) { if (num[k] == b[n - 1]) { for (count = k; count < n; count++) num[count] = num[count + 1]; } }for (j = n - 2; j >= 0; j--) { int count1 = 0; count1 = b[j]; a[j] = num[count1]; for (k = 0; k < n; k++) { if (k == b[j]) { for (count = k; count < n; count++) num[count] = num[count + 1]; } } } for (i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } return 0; } int minCount(int a[], int len) { int count = 0, i; for (i = 0; i < len; i++) { if (a[i] < a[len]) count += 1; } return count; }

【D. 实验7_21_编码、解码数组】

    推荐阅读