- 締切済み
空き番号探し
空き番号判定がよくわからないです。 順番を変える処理をする。 順番は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++){ /* 空き番判定 */ }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nag0720
- ベストアンサー率58% (1093/1860)
>空き番をどう判定するかわからないですし、 例えば3が空き番かどうか判定したいなら、data[0]~data[4]の中に3があるかどうかを確認すればいい。 配列を使えばもっと効率よく判定できるけど5個程度なら大差ないでしょう。 >処理の流れもどうすればいいか悩んでます。 頭の中や手作業ではできているのだろうから、その通りの流れにすればいいだけ。 いきなりコードを書くのは難しいでしょうから、まずは、いろいろなパターンを想定して日本語で流れを書いてみてはいかがですか。 といっても、#1さんへの補足に書かれている内容でほぼ全パターンを網羅していると思いますので、あとはそれをまとめるだけです。
- kmee
- ベストアンサー率55% (1857/3366)
その「空き番」というのが何を意味するか、まったくわかりません。 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になる。 すみません。説明が不十分でした。