我要发布
仪器网/ 仪器社区/ 编码器/ 编码问题

编码问题

听雨楼亭转角处    2008-12-15    编码器    浏览 431 次

设有一个整形数组 A[0..N-1];存放的元素为 0~N-1 (1 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,则表示根据编码反求数组)
数组个数
数组或数组编码元素

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

正推很简单,不用说了,关键是反推,哪位大侠能给一个数学递推式啊?不胜感激!!

精彩问答
as18813840409 发布日期:2008-12-16
反推:
从后往前看 , 编码后『0,0,0,3,1,2』
Z后一个2表示 原数组前5位有两个比Z后一位的数字小,又因为原数组是1到6的数字不重复,所以Z后一位等于2。
再看倒数第二位1,说明原数组前4位有1个比倒数第二位小,只能是0比1小,所以倒数第2位为1
。。。。。
算法就可以出来了
定义一个标志数组
伪码:
bool flag[n] = {false}; //表示数字是否被使用过了
for(int i = n-1 ; i >= 0 ; i--)
{
~~~~从flag中找到还未使用的第A1[i]个数字,他在flag中的序号就是A[i]
}
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控