問題は配列の左回転です。Cコードの下にセグメンテーションフォルトがあるのはなぜですか?
最初の行には、それぞれの値がn
(整数)およびd
(実行する必要がある左回転数)という2つのスペース区切りの整数が含まれています。 2行目には、配列の初期状態の各要素を記述する、スペースで区切った整数n
が含まれています。
私のソリューション:
#include <stdio.h>
#include <malloc.h>
int main() {
int n, d, i;
scanf("%d %d", &n, &d);
int *a = (int *)malloc(sizeof(int) * n);
int *temp = (int *)malloc(sizeof(int) * d);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < d; i++)
temp[i] = a[i];
for (i = 0; i < n - d; i++)
a[i] = a[i + d];
for (i = 0; i < n; i++)
a[i + n - d] = temp[i];
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
あなたは 'scanf'の戻り値を無視しています。致命的な論理欠陥。 –
入力とは何ですか? d> nのときは、常にSIGSEGVを取得します。 – 4pie0
デバッガを使用します。 debug printfsを使用してください。基本的なデバッグ手法を学ぶ(すぐに投稿することは、多くの人が考えているように見えるにもかかわらず、大きなデバッグ手法ではありません)。関連する言語タグのみを選択してください。 CとC++は同じ言語ではありません。 – kaylum