下の例のよう整数のリストが与えられ、重複を一番左の要素から消して、それをreturnする関数を作成しようと思っています。(codewarsのこの問題ですhttps://www.codewars.com/kata/5ba38ba180824a86850000f7/train/c)
solve [3, 4, 4, 3, 6, 3]-- => [4, 6, 3] -- Remove the 3's at indices 0 and 3 -- followed by removing a 4 at index 1 [1, 2, 1, 2, 1, 2, 3] → [1, 2, 3] [1, 1, 4, 5, 1, 2, 1] → [4, 5, 2, 1]
コード
c
1#include <stdlib.h> 2#include <stddef.h> 3 4int* solve(const int* arrin, size_t szin, size_t *szout) { 5 6 size_t i, j, size = 0; 7 int* arrout = (int*) malloc(sizeof(int) * szin); 8 arrout[0] = arrin[szin - 1]; //一番最後の数字は残ることが確定しているから とりあえず先頭から詰めていく 9 10 for(i = szin - 2; i >= 0; i--)//最後から2番目の数字から 11 { 12 int count = 0; 13 for(j = i + 1; j < szin; j--) 14 { 15 if(arrin[i] == arrin[j])count++; //重複があるかどうか 16 } 17 18 if(count != 0)//重複がなければ順に詰めていく 19 { 20 size++; 21 arrout[size] = arrin[i]; 22 } 23 24 25 26 } 27 28 for(i = 0, j = size; i <= size, j >= 0; i++, j--) //反転するため 29 { 30 31 arrout[i] = arrout[j]; 32 33 } 34 *szout = (size + 1); 35 return arrout; 36} 37 38// NB: assign the length of your return array to the provided *szout
エラー
fixture.c:49:29: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fixture.c:35:34: note: expanded from macro 'ASSERT_ARR_EQ' printf("Expected %i\n", exp); \ ~~ ^~~ fixture.c:49:50: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ fixture.c:36:36: note: expanded from macro 'ASSERT_ARR_EQ' printf("Submitted %i\n\n", sub); \ ~~ ^~~ fixture.c:59:29: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fixture.c:35:34: note: expanded from macro 'ASSERT_ARR_EQ' printf("Expected %i\n", exp); \ ~~ ^~~ fixture.c:59:50: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ fixture.c:36:36: note: expanded from macro 'ASSERT_ARR_EQ' printf("Submitted %i\n\n", sub); \ ~~ ^~~ fixture.c:70:29: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fixture.c:35:34: note: expanded from macro 'ASSERT_ARR_EQ' printf("Expected %i\n", exp); \ ~~ ^~~ fixture.c:70:50: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ fixture.c:36:36: note: expanded from macro 'ASSERT_ARR_EQ' printf("Submitted %i\n\n", sub); \ ~~ ^~~ fixture.c:80:29: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fixture.c:35:34: note: expanded from macro 'ASSERT_ARR_EQ' printf("Expected %i\n", exp); \ ~~ ^~~ fixture.c:80:50: warning: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Wformat] ASSERT_ARR_EQ(expected, exp_len, submission, sub_len); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~ fixture.c:36:36: note: expanded from macro 'ASSERT_ARR_EQ' printf("Submitted %i\n\n", sub); \ ~~ ^~~ 8 warnings generated. Execution Timed Out (12000 ms)
エラーコードの意味が分からないので、教えていただけないでしょうか?また、タイムアウトになるのですが、どの部分が問題でしょうか?
テストコードは文字数の関係で、ここに貼れなかったのですが、URL先にあります。
> また、タイムアウトになるのですが、どの部分が問題でしょうか?
codewars使うって事は学習目的だと思うんですけど、それを自分で調べたり検証しないと勉強にならないのではないですか?
期待通り処理が流れているかprintfで変数値を出力したり、clockでどこで時間掛かってるか調べるとよいかと思いますけど。
回答3件
あなたの回答
tips
プレビュー