回 帖 发 新 帖 刷新版面

主题:求助:一道小学奥赛题

设有一个包含N个元素的一维数组A,存放的元素为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[2],……,A[i-1]中比A[i]的值小的数的个数,(I=1,2,3,……,N-1)
所以上面数组A的编码为B=(0,0,0,3,1,2)。现在要解决的问题是,当给出元素个数N ( N〈=9 〉和数组A的编码B后,根据B的值求出数组A中的原数据。
  例如: 输入6
0  0   0  3  1  2
        输出
            4  3  0  5   1   2





回复列表 (共6个回复)

沙发

这个题目并不难。
从后面往前看。
最后一个编码值,就是前面一共有比他小的数的个数,也就是最后一个数的值;
然后再往前看一个,唯一要注意的就是排出最后一个数的干扰。

板凳

老大,能发个程序来吗?我觉得你说的和题目有些出入!!

3 楼

这道题我粗略看了一下,似乎有些问题,就是求解过程不是唯一的!
要使其解唯一,对编码无比有所限制。

另,上一贴中的“排出”应该为“排除”。

4 楼

input"n=",n
dim a(n),b(n)
for i=1 to n
  print"b(";i;
  input")=",b(i)
next
for i=1 to n
  a(i)=-1
next
k=1
do until k<1
  'print a(1);a(2);a(3);a(4);a(5);a(6),k;j,input$(1)
  if a(k)<b(k)then a(k)=b(k)else a(k)=a(k)+1
  if a(k)>=n then
   a(k)=-1
   k=k-1
  else
   j=0
   for i=1 to k-1
    if a(i)<a(k)then j=j+1
    if a(i)=a(k)then j=-N
   next
   if j=b(k)then
    k=k+1
   elseif j>b(k)then
    a(k)=-1
    k=k-1
   end if
  end if
  if k>n then
   for i=1 to n
    print a(i);
   next
   print
   k=k-1
  end if
loop

5 楼

谢谢MOZ,可是它要求的答案是一个!

能把思路也讲讲吗?

6 楼

跟着程序走

我来回复

您尚未登录,请登录后再回复。点此登录或注册