① 给出数组A后,求出其编码; ② 给出数组A的编码后,求出A中的原数据。

描述
设有一个数组 A:;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
例如:
N=5时,有:A=(4,3,0,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,1,2)

程序要求解决以下问题:
① 给出数组A后,求出其编码;
② 给出数组A的编码后,求出A中的原数据。

输入:
每个测试文件只包含一组测试数据,每组输入包含三行。
第一行输入整数N;
第二行输入有两种可能:
例如:
A=(4,3,0,5,1,2)

B=(0,0,0,3,1,2)
其中输入中的逗号和括号都是英文状态下的。

输出:
当输入的是A=(…),则输出其编码。
当输入的是B=(…),则输出A中的原数据。
输出数据的格式和输入数据的格式是一样的。

样例输入:
6
A=(4,3,0,5,1,2)

样例输出:
B=(0,0,0,3,1,2)

实现代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAXSIZE 100

void displayB(int array[], int size);
void displayA(int array[], int size);


int main()
{
	int size;				/*要输入多少个数据*/
	int A[MAXSIZE];			/*原数据*/
	int B[MAXSIZE];			/*编码后的数据*/
	int indexOfA = 0;
	int indexOfB = 0;
	char c;
	char flag;

	while(scanf("%d", &size) != EOF){

		indexOfA = 0;
		indexOfB = 0;
		flag = 0;
		memset(A, 0, MAXSIZE * sizeof(int));
		memset(B, 0, MAXSIZE * sizeof(int));
	
		/**********/
		/*数据读取*/
		/**********/
		fflush(stdin);
		while((c = getchar()) != ')'){				/*遇到)表示一组数据输入完成*/	
			if(c == 'A')
				flag = 'A';
			else if(c == 'B')
				flag = 'B';
			
			if(isdigit(c)){							/*判断字符是否是数字*/
				ungetc(c, stdin);					/*把c返回输入流*/
				if(flag == 'A')
					scanf("%d", &A[indexOfA++]);		/*获取数据,存入数组A*/
				else if(flag == 'B')
					scanf("%d", &B[indexOfB++]);
			}
		}
		
		if(flag == 'A'){				/*输出编码*/
			B[0] = 0;

			for(indexOfA = 1; indexOfA < size; indexOfA++){
				for(indexOfB = 0; indexOfB < indexOfA; indexOfB++){
					if(A[indexOfB] < A[indexOfA]){
						B[indexOfA]++;
					}
				}
			}

			displayB(B, size);
			
		}else{							/*输出原数据*/
			for(indexOfB = 1; indexOfB < size; indexOfB++){
				A[indexOfB] = B[indexOfB];
				for(indexOfA = 0; indexOfA < indexOfB; indexOfA++){
					if(A[indexOfB] <= A[indexOfA])
						A[indexOfA]++;
				}
			}

			displayA(A, size);
		}
	}
	return 0;
}

void displayB(int array[], int size)
{
	printf("B=(");
	for(int i = 0; i < size; i++){
		if(i == size - 1)
			printf("%d)", array[i]);
		else
			printf("%d,", array[i]);
	}
}

void displayA(int array[], int size)
{
	printf("A=(");
	for(int i = 0; i < size; i++){
		if(i == size - 1)
			printf("%d)", array[i]);
		else
			printf("%d,", array[i]);
	}
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值