回答編集履歴

4

ほんの少しだけ変更(これがバグになることはほぼないですが)

2017/07/13 03:06

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  for(i = 0; i <= strlen(num); i++) {
60
60
 
61
- if( num[i] + 1 != num[i+1]) {
61
+ if( num[i+1] == '\0' || num[i] + 1 != num[i+1]) {
62
62
 
63
63
  work[j] = num[i];
64
64
 

3

追記

2017/07/13 03:06

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -19,6 +19,10 @@
19
19
 
20
20
 
21
21
  ---
22
+
23
+
24
+
25
+ 書いてみました。
22
26
 
23
27
 
24
28
 
@@ -78,7 +82,7 @@
78
82
 
79
83
 
80
84
 
81
- printf(num);
85
+ printf(num); // 5795
82
86
 
83
87
  }
84
88
 

2

追記

2017/07/13 02:58

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -15,3 +15,71 @@
15
15
  このプログラムではリスト構造を用いる必要もなければ、メリットもありません。
16
16
 
17
17
  配列(文字列)のまま扱うべきでしょう。
18
+
19
+
20
+
21
+ ---
22
+
23
+
24
+
25
+ ```C
26
+
27
+ #include<stdio.h>
28
+
29
+ #include<stdlib.h>
30
+
31
+ #define MAXLINE 11
32
+
33
+
34
+
35
+ int main()
36
+
37
+ {
38
+
39
+ int i, j;
40
+
41
+ char num[MAXLINE];
42
+
43
+ char work[MAXLINE];
44
+
45
+
46
+
47
+ strcpy(num, "2563579015");
48
+
49
+
50
+
51
+ while(1){
52
+
53
+ j = 0;
54
+
55
+ for(i = 0; i <= strlen(num); i++) {
56
+
57
+ if( num[i] + 1 != num[i+1]) {
58
+
59
+ work[j] = num[i];
60
+
61
+ j += 1;
62
+
63
+ } else {
64
+
65
+ i += 1;
66
+
67
+ }
68
+
69
+ }
70
+
71
+ work[j] = '\0';
72
+
73
+ if(strcmp(num, work) == 0) break;
74
+
75
+ strcpy(num, work);
76
+
77
+ }
78
+
79
+
80
+
81
+ printf(num);
82
+
83
+ }
84
+
85
+ ```

1

int配列ではなく文字列とのことなので修正

2017/07/13 02:56

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -8,10 +8,10 @@
8
8
 
9
9
  やりたい事は連続した数を抜くということなので、データとしては増える事はなく減る一方の処理ですね。
10
10
 
11
- それならばリスト構造ではなく配列で扱った方がシンプルになると思います。
11
+ それならばリスト構造ではなく配列(文字列)で扱った方がシンプルになると思います。
12
12
 
13
13
 
14
14
 
15
- 配列長さの判定すがざっと思いつく限りで、-1などの使わない数値末端文字として扱う方法と、配列の長さを変数を意す方法がありま
15
+ プログラムではリスト構造を用必要もなければ、メリットもありません
16
16
 
17
- 個人的にスマートなのは末端文字を使方法だと思います
17
+ 配列(文字列)のまま扱べきでしょう