主题:求助:一道小学奥赛题
gulang5926
[专家分:0] 发布于 2006-10-30 08:40:00
设有一个包含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个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2006-10-30 14:34:00
这个题目并不难。
从后面往前看。
最后一个编码值,就是前面一共有比他小的数的个数,也就是最后一个数的值;
然后再往前看一个,唯一要注意的就是排出最后一个数的干扰。
板凳
gulang4533 [专家分:30] 发布于 2006-10-30 14:42:00
老大,能发个程序来吗?我觉得你说的和题目有些出入!!
3 楼
老大徒伤悲 [专家分:29120] 发布于 2006-10-31 14:04:00
这道题我粗略看了一下,似乎有些问题,就是求解过程不是唯一的!
要使其解唯一,对编码无比有所限制。
另,上一贴中的“排出”应该为“排除”。
4 楼
moz [专家分:37620] 发布于 2006-10-31 23:10:00
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 楼
gulang5926 [专家分:0] 发布于 2006-11-01 13:00:00
谢谢MOZ,可是它要求的答案是一个!
能把思路也讲讲吗?
6 楼
moz [专家分:37620] 发布于 2006-11-01 20:59:00
跟着程序走
我来回复