C言語の線形探索の課題なんですが
5つの整数を入力して
その入力した値からみつけたい値を探索する課題なのですが
#include <stdio.h>
/*--- 要素数nの配列aからkeyと一致する要素を線形探索 ---*/
int search(const int a[], int n, int key)
{
int i = 0;
while (1) {
if (i == n)
return (-1);/* 探索失敗 */
if (a[i] == key)
return (i);/* 探索成功 */
i++;
}
}
int main(void)
{
int i, ky, idx;
int x[4];
int nx = sizeof(x) / sizeof(x[0]);
printf("%d個の整数を入力してください。\n", nx);
for (i = 0; i < nx; i++) {
printf("x[%d]:", i);
scanf("%d", &x[i]);
}
printf("探す値:");
scanf("%d", &ky);
idx = search(x, nx, ky);/* 配列xから値がkyである要素を線形探索 */
if (idx == -1)
puts("探索に失敗しました。");
else
printf("%dは%d番目にあります。\n", ky, idx + 1);
return (0);
}
ここまではわかるのですが、
x[0]=99
x[1]=99
x[2]=88
x[3]=99
x[4]=22
と入力したときに
99は
1番目に見つかりました
2番目に見つかりました
4番目に見つかりました
と出力したいのですがうまくいきません
線形探索で同じ数値を探索するにはどうすればよいのですか?
No.1ベストアンサー
- 回答日時:
#include <stdio.h>
/*--- 要素数nの配列aからkeyと一致する要素を線形探索 ---*/
int search(const int a[], int n, int key)
{
int i = 0;
while (1) {
if (i == n) return (-1); /* 探索失敗 */
if (a[i] == key) return (i); /* 探索成功 */
i++;
}
}
int main(void)
{
int i, ky, idx, t, f;
int x[5];
int nx = sizeof(x) / sizeof(x[0]);
printf("%d個の整数を入力してください。\n", nx);
for (i = 0; i < nx; i++) {
printf("x[%d]:", i);
scanf("%d", &x[i]);
}
printf("探す値:");
scanf("%d", &ky);
t = 0;
f = -1;
while (t < nx) {
idx = search(&x[t], nx - t, ky); /* 配列xから値がkyである要素を線形探索 */
if (idx != -1) {
idx += t;
printf("%dは%d番目にあります。\n", ky, idx + 1);
t = idx + 1;
f = 0;
} else
break;
}
if (f) puts("探索に失敗しました。");
return (0);
}
No.3
- 回答日時:
#include <stdio.h>
int search(const int a[], int n, int key)
{
int i = 0;
while(1){
if (i == n) return (-1);
if (a[i] == key) return (i);
i++;
}
}
int main(void)
{
int i, ky, idx;
int x[4];
int nx = sizeof(x) / sizeof(x[0]);
printf("%d個の整数を入力してください。\n", nx);
for (i = 0; i < nx; i++){
printf("x[%d]:", i);
scanf("%d", &x[i]);
}
printf("探す値:");
scanf("%d", &ky);
for(i = 0; i < 4 && (idx = search(&x[i], nx, ky)) != -1; ){
i += idx + 1;
printf("%dは%d番目にあります。\n", ky, i);
nx -= idx + 1;
}
if (i == 0) puts("探索に失敗しました。");
return (0);
}
No.2
- 回答日時:
#include <stdio.h>
typedef void (*callback)(int, void*);
/*--- 要素数nの配列aからkeyと一致する要素を線形探索 ---*/
void search(const int a[], int n, int key, callback cb, void* arg)
{
int i;
for ( i = 0; i < n; ++i ) {
if (a[i] == key) (*cb)(i, arg);
}
}
void found(int n, void* arg) {
printf("%dは%d番目にあります。\n", *(int*)arg, n + 1);
}
int main() {
int x[] = { 99,99,88,99,22 };
int target = 99;
search(x, 5, target, &found, &target);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
ファイルに含まれるアルファベ...
-
数字列を3桁ごとにカンマで区切...
-
演算子オーバーロードのプログ...
-
C言語 エラーの原因がわからな...
-
市松模様
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
c言語 〇×ゲーム
-
C言語初心者です、、、お助けく...
-
アスタリスクで正方形
-
足して100になるような乱数のア...
-
std::set<int> で、ある値が何...
-
acceptをalarmでタイムアウトさ...
-
複数桁10進数の*桁目だけを抽出...
-
(マルチスレッド)_beginthrea...
-
C言語で三目並べをするプログラ...
-
C++でvectorにテキストファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
std::set<int> で、ある値が何...
-
ラップ関数とはどんなものですか?
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
「{ } で囲むだけ」は正しい?
-
return 1L
-
足して100になるような乱数のア...
-
C言語
-
(int *)の意味
-
system関数がうまくいかない
-
構造体の勉強中です 合計点の高...
-
C言語で分からないところがあり...
-
PowerShellがうまくいかない
-
課題でつまってます・・・
おすすめ情報