HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0831
宇木2つの配列で同じ値が入っている場所を探す方法3解決


宇木

リンク

2012/8/31(Fri) 13:28:03|NO.48965

配列 a = 4,2,8,6,1,10,7,9,3,5 を降順にソートし、
b = 10,9,8,7,6,5,4,3,2,1 のような配列になったとします。

その時に
bの10はaの6番目に入っているので6を返す
bの9はaの8番目に入っているので8を返す
bの8はaの3番目に入っているので3を返す
bの7はaの7番目に入っているので7を返す
bの6はaの4番目に入っているので4を返す


のような処理を組みたいのですがよく分からず。

repeat length(a) - 1
if a(i) = b(j) : i++ : j=0 : count(cnt) = cnt
loop

repeat length(a) - 1
mes count(cnt)
loop
のように作ってみましたが「配列の要素が無効です」と出てダメでした



この記事に返信する


てん

リンク

2012/8/31(Fri) 13:48:50|NO.48966

もし、もとの配列aの要素が1~10まで重複なく入っているならという前提ですが
10はaの6番目にある
→c(10)=6

のように、目次となる配列cを作っておけば解決します。

【配列aにおける、b(n)の位置】=c(b(n))

という関係です。



HIJIKI

リンク

2012/8/31(Fri) 14:11:30|NO.48967

これが最適かどうかは分かりませんが、
ひとつ思いついたので書かせて頂きます。


;ソート部分は既にできておられるようなので省略します。 a = 4,2,8,6,1,10,7,9,3,5 b = 10,9,8,7,6,5,4,3,2,1 ; c に結果が代入されます。 ; この場合、bの10は"6番目"ではなく"5番目"です。 ; (添字は0から始まるため) ;処理部分 repeat length(b) i = cnt repeat length(a) j = cnt if b(i) = a(j) { c(i) = j break } loop loop ;表示部分 repeat length(c) mes "b("+cnt+")="+b(cnt)+"は a("+c(cnt)+")と同値です" loop

分かりやすく説明できる自信がないのと、
全て説明してしまっても宇木様のためにならないと思い、
処理内容の説明は省かせて頂きます。
短い処理ですし、難しいことはしていないので割と簡単に理解できると思います。



宇木

リンク

2012/8/31(Fri) 16:43:41|NO.48971

理解できました。ありがとうございます。



ONION software Copyright 1997-2018(c) All rights reserved.