前提
「アルゴ式」の問題で、出力例と私の出力が違っています。
出力例
4
1
3
Error
2
私の出力
0
4
1
3
3
https://algo-method.com/tasks/828
実現したいこと
可変長配列で配列の末尾に要素を追加(Push)と 配列の末尾を出力してから、配列の末尾を削除(Pop)するプログラムを作っています。配列に要素がない場合「Error」と表示します。
発生している問題・エラーメッセージ
エラーはないです。
該当のソースコード
C
#include <stdio.h> #include <stdlib.h> #include <stdint.h> typedef struct { int *array; int capa; int len; } DynamicIntArray; DynamicIntArray * DynamicIntArray_New(int n) { DynamicIntArray *self = calloc(1, sizeof(*self)); if (!self) { return NULL; } self->capa = n; self->array = calloc(self->capa, sizeof(int)); if (!self->array) { free(self); return NULL; } return self; } DynamicIntArray * DynamicIntArray_Resize(DynamicIntArray *self, int32_t capa) { int32_t byte = sizeof(int); int32_t size = byte * capa; int *tmp = realloc(self->array, size); if (!tmp) { return NULL; } self->array = tmp; self->capa = capa; return self; } DynamicIntArray * DynamicIntArray_PushBack(DynamicIntArray *self, int elem) { if (self->len >= self->capa) { if (!DynamicIntArray_Resize(self, self->capa * 2)) { return NULL; } } self->array[self->len++] = elem; return self; } /*DynamicIntArray_Removeのみ自身で追加。あとは既存のコードを少し改良しました。*/ DynamicIntArray * DynamicIntArray_Remove(DynamicIntArray *self) { return self->len--; } void DynamicIntArray_Del(DynamicIntArray *self) { if(!self) { return; } free(self->array); free(self); } void DynamicIntArray_Show(const DynamicIntArray *self) { printf("%d\n", self->array[self->len]); } int main(void) { int N; (void)scanf("%d", &N); DynamicIntArray *ary = DynamicIntArray_New(N); int A[101]; for (int i = 0; i < N; i++) { (void)scanf("%d", &A[i]); DynamicIntArray_PushBack(ary, A[i]); } int Q; (void)scanf("%d", &Q); for (int i = 0; i < Q; i++) { int query; (void)scanf("%d", &query); if (query == 0) { int v; (void)scanf("%d", &v); DynamicIntArray_PushBack(ary, v); } else if (query == 1) { int size = sizeof(DynamicIntArray) / sizeof(DynamicIntArray); if (size > 0) { DynamicIntArray_Show(ary); DynamicIntArray_Remove(ary); } else { printf("Error\n"); } } } return 0; }
試したこと
DynamicIntArray *
DynamicIntArray_Remove()関数を自身で追加しました。
補足情報(FW/ツールのバージョンなど)
「アルゴ式」のオンラインでジャッジするところでコードを書きました。
まだ回答がついていません
会員登録して回答してみよう