重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

入力された数列がフィボナッチ数列であるかどうかを調べるプログラム fibocheck.c を作成する.

プログラムはまずキーボードから整数 n を読み取る.この n はその次に入力される数列の長さ(項の数)を表しており, 2≦n≦30 と仮定してよい.次にプログラムは入力タブから n 個の整数を読み取る.この n 個の整数が数列の第1項から第n項までの値である.最後にプログラムは,入力された数列がフィボナッチ数列であるか否かを判定し,その結果を出力する.

なおこの課題は,入力された数列を格納するために配列を用い,この配列を関数 int checkseries() に渡すという形で実装すること.関数 checkseries は,受け取った数列がフィボナッチ数列であれば 0 を返し,フィボナッチ数列でなければフィボナッチのルール an=an-1+an-2 を満たさない最初の an を返すものとする.

全然わからないので教えてほしいです。

A 回答 (1件)

#include <stdio.h>


#include <string.h>
#include <stdlib.h>

static char buffer[2048];

char* readline(void){
 fgets(buffer, 2048, stdin);
 char* cpy = malloc(strlen(buffer) + 1);
 strcpy(cpy, buffer);
 cpy[strlen(cpy) - 1] = '\0';
 return cpy;
}

int checkseries(int* series, int size) {
 int i;
 for (i = 2; i < size; i++) {
  if (series[i-2] + series[i-1] != series[i]) {
   return series[i];
  }
 }
 return 0;
}

int main(void) {
 int n, i, *series;
 while (1) {
  n = atoi(readline());
  if (n < 2 || n > 30) {
   continue;
  } else {
   break;
  }
 }
 series = (int*)malloc(sizeof(int) * n);
 for (i = 0; i < n; i++) {
  series[i] = atoi(readline());
 }
 printf("%d\n", checkseries(series, n));
 return 0;
}
    • good
    • 0

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