dポイントプレゼントキャンペーン実施中!

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番目に見つかりました

と出力したいのですがうまくいきません
線形探索で同じ数値を探索するにはどうすればよいのですか?

A 回答 (3件)

#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);
}
    • good
    • 0

#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);
}
    • good
    • 1

#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;
}
    • good
    • 0

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