図書館のさまざまな操作を監視およびクエリするための図書館システムの構築を担当しているとします。ここで、次の操作を実行する 3 つの異なるコマンドを実装するように求められます。
コマンド 1 を使用して、本棚 x に y ページの本の挿入を記録できます。
コマンド 2 を使用すると、本棚 x の y 番目の本のページ番号を出力できます。
コマンド 3 を使用すると、本棚 x の本の数を出力できます。
これらのコマンドは、{コマンド タイプ, x, y} 形式の 2D 配列として指定されます。 y 値がない場合、デフォルト値は 0 です。指定されたコマンドの結果を出力します。
したがって、入力が次の場合: 本棚の数 = 4、クエリの数 = 4、入力配列 = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; の場合、出力は
23 1
Command 1 inserts a book with 23 pages on shelf 3. Command 2 inserts a book with 128 pages on shelf 4. Command 3 prints the page number of book 0 on shelf 3. Command 4 prints the number of books on shelf 3.
になります。 この問題を解決するには、次の手順に従います:
#include <stdio.h> #include <stdlib.h> void solve(int s, int q, int q_array[][3]) { int* b; int** p; b = (int*)malloc(sizeof(int)*s); p = (int**)malloc(sizeof(int*)*s); for(int i = 0; i < s; i++) { b[i] = 0; p[i] = (int*)malloc(sizeof(int)); } int loopCount; for(loopCount = 0; loopCount < q; loopCount++) { int qtype; qtype = q_array[loopCount][0]; if (qtype == 1) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; b[x] += 1; p[x] = realloc(p[x], b[x]*sizeof(int)); p[x][b[x] - 1] = y; } else if (qtype == 2) { int x, y; x = q_array[loopCount][1]; y = q_array[loopCount][2]; printf("%d</p><p>", p[x][y]); } else { int x; x = q_array[loopCount][1]; printf("%d</p><p>", b[x]); } } if (b) free(b); for (int i = 0; i < s; i++) if (p[i]) free(p[i]); if (p) free(p); } int main() { int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr); }
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}; solve(4, 4, input_arr);Output
23 1
以上が可変長配列の使用を示す C プログラムの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。