お久しぶりです、と言っても前回投稿させてもらったのは数ヶ月なのですが。
細々とゲーム作りを進めていました。
(以前はパソコンからDay-Dという名前で投稿してたんですが、今回はスマホからなので名前が変わっています。というか同じ名前の人がいるとエラーが出るんですねここ…)
非常に単純なことで申し訳ないのですが、質問です。
int UP[7]={1,2,3,7,8,9,11}
と、あるint型の変数x(最終的には二次元配列の一要素にする予定なのですが、仮として)があるとして、
xが配列UP内のどれかと一致するかどうかを確かめたいと思っています。
もちろんif( x==1 || x==2 || (中略) || x==11 )
と総当たりでやれば出来る事はできるものの、だいぶ見辛い文になってしまうのでできれば避けたいです。
またUP内の変数全てと一致しなかった場合のケースも作るため、for構文で全チェックする方法も出来ませんでした。
最悪総当たりで書いてしまおうかと思ってはいるのですが、スマートな解決方がありましたらご教授いただけると幸いです。
配列と条件式
Re: 配列と条件式
for文でできますよ。DayDreamer さんが書きました: またUP内の変数全てと一致しなかった場合のケースも作るため、for構文で全チェックする方法も出来ませんでした。
#include <stdio.h>
int UP[7] = { 1, 2, 3, 7, 8, 9, 11 };
int main(void)
{
int x, i;
while (printf("x: "), scanf("%d", &x) == 1) {
for (i = 0; i < 7; i++)
if (UP[i] == x) break;
if (i < 7)
printf("UP[%d] = %d\n", i, x);
else
puts("not found");
}
}
配列が昇順に並んでいるなら、二分探索でできますよ。DayDreamer さんが書きました: 最悪総当たりで書いてしまおうかと思ってはいるのですが、スマートな解決方がありましたらご教授いただけると幸いです。
#include <stdio.h>
int UP[7] = { 1, 2, 3, 7, 8, 9, 11 };
int binary_search(int x)
{
int left = 0, right = 7 - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (UP[mid] < x) left = mid + 1;
else if (UP[mid] > x) right = mid - 1;
else return mid;
}
return -1;
}
int main(void)
{
int x;
while (printf("x: "), scanf("%d", &x) == 1) {
int i = binary_search(x);
if (i >= 0)
printf("UP[%d] = %d\n", i, x);
else
puts("not found");
}
}
Re: 配列と条件式
早い返信ありがとうございます。
break使ってfor構文抜けた時のiの値で判定する、ということでいいんでしょうか。目から鱗が落ちた気分です。
あとDXライブラリ使ってるということを書き忘れたことに今気づきましたが、言語関係なくいけそうでよかったです。
二分探索は便利だという話はよく聞くんですが…正直よくわかってな、アッハイ勉強します…
break使ってfor構文抜けた時のiの値で判定する、ということでいいんでしょうか。目から鱗が落ちた気分です。
あとDXライブラリ使ってるということを書き忘れたことに今気づきましたが、言語関係なくいけそうでよかったです。
二分探索は便利だという話はよく聞くんですが…正直よくわかってな、アッハイ勉強します…
Re: 配列と条件式
break を使わずに書くこともできます。Daydreamer さんが書きました: break使ってfor構文抜けた時のiの値で判定する、ということでいいんでしょうか。目から鱗が落ちた気分です。