プロが教えるわが家の防犯対策術!

空き番号判定がよくわからないです。

順番を変える処理をする。
順番は1から5まで。
変えようとする番号(s_no)がなければそのまま変えたらいいですが、

同じ番号がすである場合
下から5まで空き番を探す
空き番がある→ s_noと同じ番号は空き番未満まで1ずつ増やす。 
空き番がない(上に空き番が生じる、s_noと同じ番号)→ s_noと同じ番号は空き番まで1ずつ減らす。

空き番をどう判定するかわからないですし、処理の流れもどうすればいいか悩んでます。
アドバイスお願いします。
説明が下手なので画像を添付しました。(パターン例)

int AAA = 5;
int s_no;
int i;

int data[5];

for(i=0;i<AAA;i++){
/* 空き番判定 */

}

「空き番号探し」の質問画像

A 回答 (2件)

>空き番をどう判定するかわからないですし、



例えば3が空き番かどうか判定したいなら、data[0]~data[4]の中に3があるかどうかを確認すればいい。
配列を使えばもっと効率よく判定できるけど5個程度なら大差ないでしょう。



>処理の流れもどうすればいいか悩んでます。

頭の中や手作業ではできているのだろうから、その通りの流れにすればいいだけ。

いきなりコードを書くのは難しいでしょうから、まずは、いろいろなパターンを想定して日本語で流れを書いてみてはいかがですか。
といっても、#1さんへの補足に書かれている内容でほぼ全パターンを網羅していると思いますので、あとはそれをまとめるだけです。
    • good
    • 0

その「空き番」というのが何を意味するか、まったくわかりません。


s_noがそれぞれの値のとき、なぜ添付された表のように選択するのか、
2→s_no=4 とか 3→s_no=1とかがどんな規則なのかよくわかりません。

何がやりたいのかがわからないので、答えることができません。

とりあえずは
・「空き番」って何なのでしょう?
・s_noの「変えようとする番号」とは、何から何へ変えようとするものなのでしょう?
・やりたい事はなんなのでしょう?細かい動作ではなく、全体としてどんなものか、
例えば, {1,2,3,4,5}が「空き番」なら、s_no=3とは
「3番目」なのか「3という値」なのか、「先頭を3にする」の意味なのか。それ以外なのか

特定の番号があるかどうか調べるには
(1)全体が収まる配列を用意して
a[x]== 0なら未使用、a[x]==1なら使用中、などとする
(2)「使用中」の番号を配列に入れておいて、ある番号xが配列の中にあるかどうか調べる
for(i=0.i<aの要素数;++i) { if( x == a[i] ) {使用中;}else{未使用} }

等が常套手段です。

この回答への補足

まず、御回答ありがとうございます。
空き番は使われてない番号です。
s_noは新しい表示しようとする番号です。
s_no=3 は 3とういう値です。

やりたいことは順番を変えること。
添付した画像について説明なんですけど、
まず、5つの例を示しました。
1番目の例は順番2を4(s_no)に変更した。
 4(s_no)から5まで値が全部使われた(空き番なし)
 2が使われてない番号になる
 4から3一つずつ減る

2番目の例も順番2を4に変更した。
 4(s_no)から5まで
 使われてない(空き番)5がある。
 元の4が5になる。

3番名の例は4を2に変更した。
 2(s_no)から5まで使われてない番号4(空き番)がある。
 元の2が3になり、元の3が4になる。

4番目は2を3に変更した。
 3(s_no)から5まで使われてない番号4(空き番)がある。
 元の3が4になる
5番目は3を1に変更した。
 1(s_no)から5まで使われてない番号3(空き番)がある。
 元の1が2になり、元の2が3になる。

すみません。説明が不十分でした。

補足日時:2012/10/27 13:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!