読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

C言語で不定期練習

#include <stdio.h>
#include <stdlib.h>

int search(int a[], int n, int key) {
  int i,j;
  a[n] = key;
  for(i = 0;;i++) {
    printf("%*s|", 3, "");
    for(j = 0; j <= i; j++) {
      printf("%*s", 3, "");
      if(j > 0)
        putchar(' ');
    }
    printf("*\n");
    printf("%3d|", i);
    for(j = 0; j < n; j++)
      printf("%4d", a[j]);
    printf("\n");
    if(a[i] == key)
      break;
  }
  return i == n ? -1 : i;
}

int main(void) {
  int i, nx, ky, idx;
  int *x;

  puts("線形探索(番兵法)");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx + 1, sizeof(int));
  for(i = 0; i < nx; i++) {
    printf("x[%d] : ", i);
    scanf("%d", &x[i]);
  }
  printf("探す値 : ");
  scanf("%d", &ky);
  printf("%*s|", 3, "");
  for(i = 0; i < nx; i++)
    printf("%4d", i);
  printf("\n");
  printf("---+");
  for(i = 0; i < nx; i++)
    printf("----");
  printf("\n");
  idx = search(x, nx, ky);
  free(x);
  
  return 0;
}



#include <stdio.h>
#include <stdlib.h>

int search_idx(const int a[], int n, int key, int idx[]) {
  int i,j = 0;
  for(i = 0;i < n;i++) {
    if(a[i] == key) {
      idx[j++] = i;
    }
  }
  return j;
}

int main(void) {
  int i,j,nx,ky;
  int *x,*idx;

  puts("線形探索(番兵法)");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx + 1, sizeof(int));
  idx = calloc(nx + 1, sizeof(int));
  for(i = 0; i < nx; i++) {
    printf("x[%d] : ", i);
    scanf("%d", &x[i]);
  }
  printf("探す値 : ");
  scanf("%d", &ky);
  j = search_idx(x, nx, ky, idx);
  for(i = 0; i < j; i++)
    printf("idx[%d] = %d\n", i, idx[i]);
  printf("%d個ありました。\n", j);
  free(x);
  
  return 0;
}