回答編集履歴

29

バグ修正

2022/11/29 11:28

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -82,7 +82,7 @@
82
82
  gets(a); //入力
83
83
  #endif
84
84
  char *p=a, *q=p+1, c; //(配列以外の)変数
85
- for(; *p&&*q; *++q||(*p==' '&&(*p='-'),q=++p+1)) *p>*q&&(c=*q,*q=*p,*p=c); //処理
85
+ for(; *p&&(*q||(*p==' '&&(*p='-')&&0)); *++q||(q=++p+1)) *p>*q&&(c=*q,*q=*p,*p=c); //処理
86
86
  printf("%s\n", a); //出力
87
87
  }
88
88
  ```

28

修正

2022/11/29 11:03

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -82,7 +82,7 @@
82
82
  gets(a); //入力
83
83
  #endif
84
84
  char *p=a, *q=p+1, c; //(配列以外の)変数
85
- for(; *p&&*q; *++q||(*p==' '&&(*p='-'),p++,q=p+1)) *p>*q&&(c=*q,*q=*p,*p=c); //処理
85
+ for(; *p&&*q; *++q||(*p==' '&&(*p='-'),q=++p+1)) *p>*q&&(c=*q,*q=*p,*p=c); //処理
86
86
  printf("%s\n", a); //出力
87
87
  }
88
88
  ```

27

追加

2022/11/29 11:01

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -68,3 +68,21 @@
68
68
  printf("%s\n", b); //出力
69
69
  }
70
70
  ```
71
+ ---
72
+ 選択ソート(コード依存)。
73
+ ```c
74
+ #define __STDC_WANT_LIB_EXT1__ 1
75
+ #include <stdio.h>
76
+ #define M 50 //処理可能最大文字列長
77
+ int main(void) {
78
+ char a[M+1]; //配列
79
+ #ifdef __STDC_LIB_EXT1__
80
+ gets_s(a, M+1); //入力
81
+ #else
82
+ gets(a); //入力
83
+ #endif
84
+ char *p=a, *q=p+1, c; //(配列以外の)変数
85
+ for(; *p&&*q; *++q||(*p==' '&&(*p='-'),p++,q=p+1)) *p>*q&&(c=*q,*q=*p,*p=c); //処理
86
+ printf("%s\n", a); //出力
87
+ }
88
+ ```

26

修正

2022/11/29 10:23

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -56,7 +56,7 @@
56
56
  #include <stdio.h>
57
57
  #define M 50 //処理可能最大文字列長
58
58
  int main(void) {
59
- char a[M+1], b[M+1]={0}; //配列
59
+ char a[M+1], b[M+1]; //配列
60
60
  #ifdef __STDC_LIB_EXT1__
61
61
  gets_s(a, M+1); //入力
62
62
  #else
@@ -64,7 +64,7 @@
64
64
  #endif
65
65
  //(配列以外の)変数: i=入力文字, p=並び順文字+転記文字, o=出力先
66
66
  char *i=a, *p=" -aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", *o=b;
67
- for(; *p; *++i||(i=a,p+=2)) *p==*i&&(*o++=p[1]); //処理
67
+ for(; *p; *++i||(i=a,p+=2)) *p==*i&&(*o++=p[1]); *o='\0'; //処理
68
68
  printf("%s\n", b); //出力
69
69
  }
70
70
  ```

25

修正

2022/11/28 17:58

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -43,7 +43,7 @@
43
43
  #else
44
44
  gets(a); //入力
45
45
  #endif
46
- for(t=a, p=b; *p; (t=*++t?t:a)==a&&p++) p[N+1]+=(*t==*p); //処理
46
+ for(t=a, p=b; *p; *++t||(t=a,p++)) p[N+1]+=(*t==*p); //処理
47
47
  for(t=a, p=b, b[0]='-'; *p; p++) while(p[N+1]--) *t++=*p; *t='\0'; printf("%s\n", a); //a に展開して出力
48
48
  //for(p=b, b[0]='-'; *p; p++) while(p[N+1]--) putchar(*p); putchar('\n'); //直接出力(こっちの方が出力のためのループっぽい)
49
49
  }
@@ -64,7 +64,7 @@
64
64
  #endif
65
65
  //(配列以外の)変数: i=入力文字, p=並び順文字+転記文字, o=出力先
66
66
  char *i=a, *p=" -aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", *o=b;
67
- for(; *p; *++i?1:(i=a,p+=2)) *p==*i?*o++=p[1]:0; //処理
67
+ for(; *p; *++i||(i=a,p+=2)) *p==*i&&(*o++=p[1]); //処理
68
68
  printf("%s\n", b); //出力
69
69
  }
70
70
  ```

24

修正

2022/11/28 17:51

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -64,7 +64,7 @@
64
64
  #endif
65
65
  //(配列以外の)変数: i=入力文字, p=並び順文字+転記文字, o=出力先
66
66
  char *i=a, *p=" -aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", *o=b;
67
- for(; *p; (i=*++i?i:a)==a&&(p+=2), o+=*o!=0) *o=(*p==*i)*p[1]; //処理
67
+ for(; *p; *++i?1:(i=a,p+=2)) *p==*i?*o++=p[1]:0; //処理
68
68
  printf("%s\n", b); //出力
69
69
  }
70
70
  ```

23

修正

2022/11/28 17:27

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -62,8 +62,9 @@
62
62
  #else
63
63
  gets(a); //入力
64
64
  #endif
65
+ //(配列以外の)変数: i=入力文字, p=並び順文字+転記文字, o=出力先
65
- char *i=a, *p=" abcdefghijklmnopqrstuvwxyz", *o=b; //(配列以外の)変数: i=入力文字, p=並び順文字, o=出力先
66
+ char *i=a, *p=" -aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", *o=b;
66
- for(; *p; (i=*++i?i:a)==a&&p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
67
+ for(; *p; (i=*++i?i:a)==a&&(p+=2), o+=*o!=0) *o=(*p==*i)*p[1]; //処理
67
68
  printf("%s\n", b); //出力
68
69
  }
69
70
  ```

22

修正

2022/11/27 12:41

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -28,27 +28,29 @@
28
28
  matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ b も無くして出力も```for(i=0; i<N; i++) for(j=0; j<a[i]; j++) putchar(i+(i?0x60:0x2d)); putchar('\n');``` ですかねぇ。
29
29
 
30
30
  ---
31
+ 分布数えソート。
31
- 2重ループ的単ループ、 gets(_s) 、比較1/0 び替えた文字列を作っから printf か…
32
+ a に入力して b 後半にカウントして a (もしくは直接)出力。並べる部分が処理だ言われそう
32
33
  ```c
33
34
  #define __STDC_WANT_LIB_EXT1__ 1
34
35
  #include <stdio.h>
35
- #include <string.h>
36
36
  #define M 50 //処理可能最大文字列長
37
37
  #define N 27 //ソート対象文字(b)の文字数
38
- int main(void){
38
+ int main(void) {
39
- int i, j, k; //(配列以外の)変数
39
+ char *t, *p; //(配列以外の)変数
40
- char a[N]={0}, b[N+M+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
40
+ char a[M+1], b[N+1+N]=" abcdefghijklmnopqrstuvwxyz"; //配列
41
41
  #ifdef __STDC_LIB_EXT1__
42
- gets_s(&b[N], M+1); //入力
42
+ gets_s(a, M+1); //入力
43
43
  #else
44
- gets(&b[N]); //入力
44
+ gets(a); //入力
45
45
  #endif
46
- for(i=j=k=0; i<strlen(&b[N])*N; i++, j=i%N, k=i/N) a[j]+=(b[j]==b[N+k]); //処理
46
+ for(t=a, p=b; *p; (t=*++t?t:a)==a&&p++) p[N+1]+=(*t==*p); //処理
47
- for(i=0, k=N, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) b[k++]=b[i]; b[k]='\0'; printf("%s\n", &b[N]); //出力
47
+ for(t=a, p=b, b[0]='-'; *p; p++) while(p[N+1]--) *t++=*p; *t='\0'; printf("%s\n", a); //a に展開して出力
48
+ //for(p=b, b[0]='-'; *p; p++) while(p[N+1]--) putchar(*p); putchar('\n'); //直接出力(こっちの方が出力のためのループっぽい)
48
49
  }
49
50
  ```
50
51
  ---
52
+ 選択(外部)ソート(?)。
51
- a に入力して並び順に選んで b に溜めます短絡評価でカウント制御。
53
+ a に入力して並び順に選んで b に溜めて出力
52
54
  ```c
53
55
  #define __STDC_WANT_LIB_EXT1__ 1
54
56
  #include <stdio.h>

21

コード修正

2022/11/26 18:28

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -61,7 +61,7 @@
61
61
  gets(a); //入力
62
62
  #endif
63
63
  char *i=a, *p=" abcdefghijklmnopqrstuvwxyz", *o=b; //(配列以外の)変数: i=入力文字, p=並び順文字, o=出力先
64
- for(; *p; (i=*++i?i:a)!=a||p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
64
+ for(; *p; (i=*++i?i:a)==a&&p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
65
65
  printf("%s\n", b); //出力
66
66
  }
67
67
  ```

20

コード修正

2022/11/26 18:08

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -48,20 +48,20 @@
48
48
  }
49
49
  ```
50
50
  ---
51
- a 前半に入力して並び順に選んで a 後半に溜めます。短絡評価でカウント制御。
51
+ a に入力して並び順に選んで b に溜めます。短絡評価でカウント制御。
52
52
  ```c
53
53
  #define __STDC_WANT_LIB_EXT1__ 1
54
54
  #include <stdio.h>
55
55
  #define M 50 //処理可能最大文字列長
56
56
  int main(void) {
57
- char a[(M+1)*2]={0}; //配列
57
+ char a[M+1], b[M+1]={0}; //配列
58
58
  #ifdef __STDC_LIB_EXT1__
59
59
  gets_s(a, M+1); //入力
60
60
  #else
61
61
  gets(a); //入力
62
62
  #endif
63
- char *i=a, *p=" abcdefghijklmnopqrstuvwxyz", *o=&a[M+1]; //(配列以外の)変数: i=入力文字, p=並び順文字, o=出力先
63
+ char *i=a, *p=" abcdefghijklmnopqrstuvwxyz", *o=b; //(配列以外の)変数: i=入力文字, p=並び順文字, o=出力先
64
64
  for(; *p; (i=*++i?i:a)!=a||p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
65
- printf("%s\n", &a[M+1]); //出力
65
+ printf("%s\n", b); //出力
66
66
  }
67
67
  ```

19

コード修正

2022/11/26 18:03

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -48,21 +48,20 @@
48
48
  }
49
49
  ```
50
50
  ---
51
- a 前半に入力して b の順に選んで a 後半に溜めます。短絡評価でカウント制御。
51
+ a 前半に入力して並び順に選んで a 後半に溜めます。短絡評価でカウント制御。
52
52
  ```c
53
53
  #define __STDC_WANT_LIB_EXT1__ 1
54
54
  #include <stdio.h>
55
55
  #define M 50 //処理可能最大文字列長
56
- #define N 27 //ソート対象文字(b)の文字数
57
56
  int main(void) {
58
- char a[(M+1)*2]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
57
+ char a[(M+1)*2]={0}; //配列
59
58
  #ifdef __STDC_LIB_EXT1__
60
59
  gets_s(a, M+1); //入力
61
60
  #else
62
61
  gets(a); //入力
63
62
  #endif
64
- //(配列以外の)変数: i=a内入力文字, p=b内検索中文字, o=a内出力先
63
+ char *i=a, *p=" abcdefghijklmnopqrstuvwxyz", *o=&a[M+1]; //(配列以外の)変数: i=入力文字, p=並び順文字, o=出力先
65
- for(char *i=a, *p=b, *o=&a[M+1]; *p; (i=*++i?i:a)!=a||p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
64
+ for(; *p; (i=*++i?i:a)!=a||p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
66
65
  printf("%s\n", &a[M+1]); //出力
67
66
  }
68
67
  ```

18

コード修正(難読化?)

2022/11/26 17:44

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -48,22 +48,21 @@
48
48
  }
49
49
  ```
50
50
  ---
51
- a[0] に入力して b の順に選んで a[1] に溜めます。短絡評価でカウント制御。
51
+ a 前半に入力して b の順に選んで a 後半に溜めます。短絡評価でカウント制御。
52
- a を 1 次元にしたり、 j や k をポインタにしたりも可です。
53
52
  ```c
54
53
  #define __STDC_WANT_LIB_EXT1__ 1
55
54
  #include <stdio.h>
56
55
  #define M 50 //処理可能最大文字列長
57
56
  #define N 27 //ソート対象文字(b)の文字数
58
- int main(void){
57
+ int main(void) {
59
- int i, j, k; //(配列以外の)変数
60
- char a[2][M+1]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
58
+ char a[(M+1)*2]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
61
59
  #ifdef __STDC_LIB_EXT1__
62
60
  gets_s(a, M+1); //入力
63
61
  #else
64
62
  gets(a); //入力
65
63
  #endif
64
+ //(配列以外の)変数: i=a内入力文字, p=b内検索中文字, o=a内出力先
66
- for(i=j=k=0; b[j]; (i=a[0][++i]?i:0)||j++, k+=a[1][k]!=0) a[1][k]=(b[j]==a[0][i])*(b[j]==' '?'-':b[j]); //処理
65
+ for(char *i=a, *p=b, *o=&a[M+1]; *p; (i=*++i?i:a)!=a||p++, o+=*o!=0) *o=(*p==*i)*(*p==' '?'-':*p); //処理
67
- printf("%s\n", a[1]); //出力
66
+ printf("%s\n", &a[M+1]); //出力
68
67
  }
69
68
  ```

17

追記

2022/11/26 08:05

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -49,6 +49,7 @@
49
49
  ```
50
50
  ---
51
51
  a[0] に入力して b の順に選んで a[1] に溜めます。短絡評価でカウント制御。
52
+ a を 1 次元にしたり、 j や k をポインタにしたりも可です。
52
53
  ```c
53
54
  #define __STDC_WANT_LIB_EXT1__ 1
54
55
  #include <stdio.h>

16

strlen 外し等

2022/11/26 07:34

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -48,22 +48,21 @@
48
48
  }
49
49
  ```
50
50
  ---
51
- 択外部ソー
51
+ a[0] に入力して b の順にんで a[1] に溜めます。短絡評価でカウン制御。
52
52
  ```c
53
53
  #define __STDC_WANT_LIB_EXT1__ 1
54
54
  #include <stdio.h>
55
- #include <string.h>
56
55
  #define M 50 //処理可能最大文字列長
57
56
  #define N 27 //ソート対象文字(b)の文字数
58
57
  int main(void){
59
- int i, j, k, l; //(配列以外の)変数
58
+ int i, j, k; //(配列以外の)変数
60
59
  char a[2][M+1]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
61
60
  #ifdef __STDC_LIB_EXT1__
62
61
  gets_s(a, M+1); //入力
63
62
  #else
64
63
  gets(a); //入力
65
64
  #endif
66
- for(i=j=k=0, l=strlen(a); i<l*N; i++, j=i/l, k+=a[1][k]!=0) a[1][k]=(b[j]==a[0][i%l]?(b[j]==' '?'-':b[j]):0); //処理
65
+ for(i=j=k=0; b[j]; (i=a[0][++i]?i:0)||j++, k+=a[1][k]!=0) a[1][k]=(b[j]==a[0][i])*(b[j]==' '?'-':b[j]); //処理
67
66
  printf("%s\n", a[1]); //出力
68
67
  }
69
68
  ```

15

追加

2022/11/26 04:47

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -47,3 +47,23 @@
47
47
  for(i=0, k=N, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) b[k++]=b[i]; b[k]='\0'; printf("%s\n", &b[N]); //出力
48
48
  }
49
49
  ```
50
+ ---
51
+ 選択外部ソート
52
+ ```c
53
+ #define __STDC_WANT_LIB_EXT1__ 1
54
+ #include <stdio.h>
55
+ #include <string.h>
56
+ #define M 50 //処理可能最大文字列長
57
+ #define N 27 //ソート対象文字(b)の文字数
58
+ int main(void){
59
+ int i, j, k, l; //(配列以外の)変数
60
+ char a[2][M+1]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
61
+ #ifdef __STDC_LIB_EXT1__
62
+ gets_s(a, M+1); //入力
63
+ #else
64
+ gets(a); //入力
65
+ #endif
66
+ for(i=j=k=0, l=strlen(a); i<l*N; i++, j=i/l, k+=a[1][k]!=0) a[1][k]=(b[j]==a[0][i%l]?(b[j]==' '?'-':b[j]):0); //処理
67
+ printf("%s\n", a[1]); //出力
68
+ }
69
+ ```

14

修正

2022/11/26 03:55

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -43,7 +43,7 @@
43
43
  #else
44
44
  gets(&b[N]); //入力
45
45
  #endif
46
- for(i=0, j=0, k=strlen(&b[N])*N; i<k; i++, j=i%N) a[j]+=(b[i/N]==b[j]); //処理
46
+ for(i=j=k=0; i<strlen(&b[N])*N; i++, j=i%N, k=i/N) a[j]+=(b[j]==b[N+k]); //処理
47
47
  for(i=0, k=N, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) b[k++]=b[i]; b[k]='\0'; printf("%s\n", &b[N]); //出力
48
48
  }
49
49
  ```

13

修正

2022/11/26 03:32

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -25,7 +25,7 @@
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
27
 
28
- matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ b も無くして出力も```for(i=0; i<N; i++) for(j=0; j<a[i]; j++) putchar(i+i?0x60:0x2d); putchar('\n');``` ですかねぇ。
28
+ matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ b も無くして出力も```for(i=0; i<N; i++) for(j=0; j<a[i]; j++) putchar(i+(i?0x60:0x2d)); putchar('\n');``` ですかねぇ。
29
29
 
30
30
  ---
31
31
  2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。

12

gets 、 gets_s を EXT1 で切り替え

2022/11/26 02:31

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -30,6 +30,7 @@
30
30
  ---
31
31
  2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。
32
32
  ```c
33
+ #define __STDC_WANT_LIB_EXT1__ 1
33
34
  #include <stdio.h>
34
35
  #include <string.h>
35
36
  #define M 50 //処理可能最大文字列長
@@ -37,7 +38,11 @@
37
38
  int main(void){
38
39
  int i, j, k; //(配列以外の)変数
39
40
  char a[N]={0}, b[N+M+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
41
+ #ifdef __STDC_LIB_EXT1__
42
+ gets_s(&b[N], M+1); //入力
43
+ #else
40
- gets/*_s*/(&b[N]); //入力
44
+ gets(&b[N]); //入力
45
+ #endif
41
46
  for(i=0, j=0, k=strlen(&b[N])*N; i<k; i++, j=i%N) a[j]+=(b[i/N]==b[j]); //処理
42
47
  for(i=0, k=N, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) b[k++]=b[i]; b[k]='\0'; printf("%s\n", &b[N]); //出力
43
48
  }

11

修正

2022/11/26 02:17

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -25,7 +25,7 @@
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
27
 
28
- matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ j と b も無くして出力も```for(i=0; i<N; i++) putchar(a[i]+i?0x60:0x2d); putchar('\n');``` ですかねぇ。
28
+ matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ b も無くして出力も```for(i=0; i<N; i++) for(j=0; j<a[i]; j++) putchar(i+i?0x60:0x2d); putchar('\n');``` ですかねぇ。
29
29
 
30
30
  ---
31
31
  2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。

10

修正

2022/11/26 02:13

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -24,7 +24,9 @@
24
24
  super califragilistic expiali docious
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
+
27
- matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ j と b も無くして出力も```for(i=0; i<N; i++) putchar(a[i]+a[i]?0x60:0x2d); putchar('\n');``` ですかねぇ。
28
+ matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ j と b も無くして出力も```for(i=0; i<N; i++) putchar(a[i]+i?0x60:0x2d); putchar('\n');``` ですかねぇ。
29
+
28
30
  ---
29
31
  2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。
30
32
  ```c

9

追記

2022/11/26 02:10

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -24,6 +24,7 @@
24
24
  super califragilistic expiali docious
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
+ matukeso さんの『 0x1f で AND 』を用いれば、処理の行は ```a[c & 0x1f]++;``` だけになるので、ループの制限は問題無さそうで、そしたらいっそ j と b も無くして出力も```for(i=0; i<N; i++) putchar(a[i]+a[i]?0x60:0x2d); putchar('\n');``` ですかねぇ。
27
28
  ---
28
29
  2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。
29
30
  ```c

8

修正

2022/11/25 13:41

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -25,7 +25,7 @@
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
27
  ---
28
- 2重ループ的単ループ、 gets(_s) 、論理式の 1/0 、並び替えた文字列を作ってから printf とか…。
28
+ 2重ループ的単ループ、 gets(_s) 、比較の 1/0 、並び替えた文字列を作ってから printf とか…。
29
29
  ```c
30
30
  #include <stdio.h>
31
31
  #include <string.h>

7

コメント修正

2022/11/25 12:08

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -7,7 +7,7 @@
7
7
  ```c
8
8
  #include <stdio.h>
9
9
  #define M 50 //処理可能最大文字列長
10
- #define N 27 //ソート対象文字(b)の文字列の長さ
10
+ #define N 27 //ソート対象文字(b)の文字
11
11
  int main(void){
12
12
  int i, j, c; //(配列以外の)変数
13
13
  char a[N+1]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
@@ -30,7 +30,7 @@
30
30
  #include <stdio.h>
31
31
  #include <string.h>
32
32
  #define M 50 //処理可能最大文字列長
33
- #define N 27 //ソート対象文字(b)の文字列の長さ
33
+ #define N 27 //ソート対象文字(b)の文字
34
34
  int main(void){
35
35
  int i, j, k; //(配列以外の)変数
36
36
  char a[N]={0}, b[N+M+1]=" abcdefghijklmnopqrstuvwxyz"; //配列

6

追加

2022/11/25 12:04

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -24,3 +24,18 @@
24
24
  super califragilistic expiali docious
25
25
  ---aaacccdeefgiiiiiiillloopprrssstuux
26
26
  ```
27
+ ---
28
+ 2重ループ的単ループ、 gets(_s) 、論理式の 1/0 、並び替えた文字列を作ってから printf とか…。
29
+ ```c
30
+ #include <stdio.h>
31
+ #include <string.h>
32
+ #define M 50 //処理可能最大文字列長
33
+ #define N 27 //ソート対象の文字列(b)の文字列の長さ
34
+ int main(void){
35
+ int i, j, k; //(配列以外の)変数
36
+ char a[N]={0}, b[N+M+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
37
+ gets/*_s*/(&b[N]); //入力
38
+ for(i=0, j=0, k=strlen(&b[N])*N; i<k; i++, j=i%N) a[j]+=(b[i/N]==b[j]); //処理
39
+ for(i=0, k=N, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) b[k++]=b[i]; b[k]='\0'; printf("%s\n", &b[N]); //出力
40
+ }
41
+ ```

5

define 化

2022/11/25 11:23

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -6,12 +6,14 @@
6
6
 
7
7
  ```c
8
8
  #include <stdio.h>
9
+ #define M 50 //処理可能最大文字列長
10
+ #define N 27 //ソート対象の文字列(b)の文字列の長さ
9
- int main(void) {
11
+ int main(void){
10
12
  int i, j, c; //(配列以外の)変数
11
- char a[27+1]={0}, b[]=" abcdefghijklmnopqrstuvwxyz"; //配列
13
+ char a[N+1]={0}, b[N+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
12
- for(i=0; i<50 && (c=getchar())!=EOF; i++) //入力(これは入力の為のループなのです!)
14
+ for(i=0; i<M && (c=getchar())!=EOF; i++) //入力(これは入力の為のループなのです!)
13
- { for(j=0; j<27 && b[j]!=c; j++); a[j]++; } //処理
15
+ { for(j=0; j<N && b[j]!=c; j++); a[j]++; } //処理
14
- for(i=0, b[0]='-'; i<27; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n'); //出力
16
+ for(i=0, b[0]='-'; i<N; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n'); //出力
15
17
  }
16
18
  ```
17
19
  ```plain

4

編集

2022/11/25 11:07

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -6,10 +6,11 @@
6
6
 
7
7
  ```c
8
8
  #include <stdio.h>
9
- int main(void){
9
+ int main(void) {
10
10
  int i, j, c; //(配列以外の)変数
11
- char a[27+1]={0}, b[27+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
11
+ char a[27+1]={0}, b[]=" abcdefghijklmnopqrstuvwxyz"; //配列
12
+ for(i=0; i<50 && (c=getchar())!=EOF; i++) //入力(これは入力の為のループなのです!)
12
- for(i=0; i<50 && (c=getchar())!=EOF; i++) { for(j=0; j<27 && b[j]!=c; j++); a[j]++; } //入力・処理
13
+ { for(j=0; j<27 && b[j]!=c; j++); a[j]++; } //処理
13
14
  for(i=0, b[0]='-'; i<27; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n'); //出力
14
15
  }
15
16
  ```

3

修正

2022/11/25 10:22

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -1,4 +1,4 @@
1
- ソートの中には、実際には "元のデータは並び替えずに、並び替えたデータを作り出す" ソートというのもあります。
1
+ ソートの中には、"実際には元のデータは並び替えずに、並び替えたデータを作り出す" ソートというのもあります。
2
2
 
3
3
  ---
4
4
 

2

修正

2022/11/25 08:33

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  ---
4
4
 
5
+ c で行数制限などほぼ無意味なのに…。
6
+
5
7
  ```c
6
8
  #include <stdio.h>
7
9
  int main(void){
8
- int i, j, c;
10
+ int i, j, c; //(配列以外の)変数
9
- char a[27+1]={0}, b[27+1]=" abcdefghijklmnopqrstuvwxyz";
11
+ char a[27+1]={0}, b[27+1]=" abcdefghijklmnopqrstuvwxyz"; //配列
10
- for(i=0; i<50 && (c=getchar())!=EOF; i++) { for(j=0; j<27 && b[j]!=c; j++); a[j]++; }
12
+ for(i=0; i<50 && (c=getchar())!=EOF; i++) { for(j=0; j<27 && b[j]!=c; j++); a[j]++; } //入力・処理
11
- for(i=0, b[0]='-'; i<27; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n');
13
+ for(i=0, b[0]='-'; i<27; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n'); //出力
12
14
  }
13
15
  ```
14
16
  ```plain

1

コード追加

2022/11/25 08:30

投稿

jimbe
jimbe

スコア12632

test CHANGED
@@ -1 +1,21 @@
1
1
  ソートの中には、実際には "元のデータは並び替えずに、並び替えたデータを作り出す" ソートというのもあります。
2
+
3
+ ---
4
+
5
+ ```c
6
+ #include <stdio.h>
7
+ int main(void){
8
+ int i, j, c;
9
+ char a[27+1]={0}, b[27+1]=" abcdefghijklmnopqrstuvwxyz";
10
+ for(i=0; i<50 && (c=getchar())!=EOF; i++) { for(j=0; j<27 && b[j]!=c; j++); a[j]++; }
11
+ for(i=0, b[0]='-'; i<27; i++) for(j=0; j<a[i]; j++) putchar(b[i]); putchar('\n');
12
+ }
13
+ ```
14
+ ```plain
15
+ brick quiz whangs jumpy veldt fox.
16
+ -----abcdefghiijklmnopqrstuuvwxyz
17
+ ```
18
+ ```plain
19
+ super califragilistic expiali docious
20
+ ---aaacccdeefgiiiiiiillloopprrssstuux
21
+ ```