質問編集履歴

5

ミス入力

2020/08/03 11:33

投稿

KeiD
KeiD

スコア26

test CHANGED
@@ -1 +1 @@
1
- ユークリッド互除法について
1
+ 自然数負の値入力について
test CHANGED
@@ -5,10 +5,6 @@
5
5
  int main(void)
6
6
 
7
7
  {
8
-
9
- int a, b, r, x, tmp;
10
-
11
-
12
8
 
13
9
  printf("2つの自然数を入力してください。\n");
14
10
 
@@ -20,48 +16,6 @@
20
16
 
21
17
  scanf("%d", &b);
22
18
 
23
- x = a * b;
24
-
25
- /* 自然数 a > b を確認・入替 */
26
-
27
- if(a<b){
28
-
29
- tmp = a;
30
-
31
- a = b;
32
-
33
- b = tmp;
34
-
35
- }
36
-
37
-
38
-
39
- /* ユークリッドの互除法 */
40
-
41
- r = a % b;
42
-
43
- while(r!=0){
44
-
45
- a = b;
46
-
47
- b = r;
48
-
49
- r = a % b;
50
-
51
- printf("%d %d\n",b,r);
52
-
53
- }
54
-
55
- printf("最大公約数=%d\n",b);
56
-
57
- /* 最小公倍数を出力 */
58
-
59
- printf("最小公倍数 = %d\n", x/b);
60
-
61
- return 0;
62
-
63
- }
64
-
65
19
 
66
20
 
67
21
  ```

4

変更中

2020/08/03 11:33

投稿

KeiD
KeiD

スコア26

test CHANGED
@@ -1 +1 @@
1
- 入力文字列のそれぞれの文字を数え、数が大き順に並べる以下
1
+ ユークリッド互除法につ
test CHANGED
@@ -1,159 +1,67 @@
1
+ ```ここに言語を入力
2
+
1
- 入力文字列のそれぞれの文字を数え、数が大きい順に並べる以下のプログラム
3
+ #include <stdio.h>
4
+
5
+ int main(void)
6
+
7
+ {
8
+
9
+ int a, b, r, x, tmp;
2
10
 
3
11
 
4
12
 
13
+ printf("2つの自然数を入力してください。\n");
5
14
 
15
+ printf("1つ目の自然数 = ");
6
16
 
7
- ```ここに言語を入力#include <stdio.h>
17
+ scanf("%d", &a);
8
18
 
9
- #include <math.h>
19
+ printf("2つ目の自然数 = ");
10
20
 
11
- #include <ctype.h>
21
+ scanf("%d", &b);
12
22
 
23
+ x = a * b;
13
24
 
25
+ /* 自然数 a > b を確認・入替 */
14
26
 
27
+ if(a<b){
15
28
 
29
+ tmp = a;
16
30
 
17
- int main()
31
+ a = b;
18
32
 
19
- {
20
-
21
- size_t size = pow(2, 8); // 1byte = 2^8bit
22
-
23
- int a[size],b[size];
24
-
25
- char c;
26
-
27
- int i,j;
33
+ b = tmp;
28
-
29
-
30
-
31
- // 初期化
32
-
33
- for (i=0; i<size; i++) {
34
-
35
- a[i] = 0;
36
-
37
- b[i]=i;
38
-
39
- }
40
-
41
-
42
-
43
- // 文字数をカウント
44
-
45
- while(scanf("%c", &c)!=EOF) {
46
-
47
- if (c == '\n') continue; // 改行は無視
48
-
49
- if (c == ' ') continue; // スペースは無視
50
-
51
- a[c]++;
52
-
53
- }
54
-
55
-
56
-
57
- // カウントが1以上の文字のみ出力(文字 カウント)
58
-
59
-
60
-
61
- for(i=0;i<26;i++){
62
-
63
- for(j=i+1;j<26;j++){
64
-
65
- if(a[i+97]<a[j+97]){
66
-
67
- // 値の交換
68
-
69
- int t = a[i+97];
70
-
71
- a[i+97] = a[j+97];
72
-
73
- a[j+97] = t;
74
-
75
- // アルファベット順の交換
76
-
77
- t = b[i+97];
78
-
79
- b[i+97] = b[j+97];
80
-
81
- b[j+97] = t;
82
-
83
- }
84
-
85
- }
86
34
 
87
35
  }
88
36
 
89
37
 
90
38
 
91
- for(i=0; i<26; i++) {
39
+ /* ユークリッドの互除法 */
92
40
 
93
- if(a[i+97]<=2) continue;
41
+ r = a % b;
94
42
 
43
+ while(r!=0){
44
+
45
+ a = b;
46
+
47
+ b = r;
48
+
49
+ r = a % b;
50
+
51
+ printf("%d %d\n",b,r);
52
+
53
+ }
54
+
55
+ printf("最大公約数=%d\n",b);
56
+
57
+ /* 最小公倍数を出力 */
58
+
95
- printf(" %c %2d\n", (char)(b[i+97]), a[i+97]);
59
+ printf("最小公倍数 = %d\n", x/b);
60
+
61
+ return 0;
96
62
 
97
63
  }
98
64
 
99
65
 
100
66
 
101
- return 0;
102
-
103
- }
104
-
105
67
  ```
106
-
107
- に同じ文字が同列で入力された場合
108
-
109
-
110
-
111
- 例えば
112
-
113
- tttttttssssmmmmmnnnnnkkkkkoooo
114
-
115
- と入力すると
116
-
117
-
118
-
119
- t 7
120
-
121
- m 5
122
-
123
- n 5
124
-
125
- k 5
126
-
127
- s 4
128
-
129
- o 4
130
-
131
-
132
-
133
-
134
-
135
- と出力されますが、同列のm,n,kがアルファベット順ではないです。
136
-
137
- s,oもアルファベット順に表示されません。
138
-
139
-
140
-
141
- t 7
142
-
143
- k 5
144
-
145
- m 5
146
-
147
- n 5
148
-
149
- o 4
150
-
151
- s 4
152
-
153
-
154
-
155
-
156
-
157
- とアルファベット順に出力するにはどう変更すればよいか
158
-
159
- ご存じの方よろしくお願い致します。

3

追加

2020/08/03 10:47

投稿

KeiD
KeiD

スコア26

test CHANGED
File without changes
test CHANGED
@@ -138,6 +138,22 @@
138
138
 
139
139
 
140
140
 
141
+ t 7
142
+
143
+ k 5
144
+
145
+ m 5
146
+
147
+ n 5
148
+
149
+ o 4
150
+
151
+ s 4
152
+
153
+
154
+
155
+
156
+
141
- アルファベット順に表示するにはどう変更すればよいか
157
+ アルファベット順に出力するにはどう変更すればよいか
142
158
 
143
159
  ご存じの方よろしくお願い致します。

2

アルファベット順並び替え

2020/08/03 09:46

投稿

KeiD
KeiD

スコア26

test CHANGED
@@ -1 +1 @@
1
- 文字が表示さない(数と文字の対応並べ替え後)
1
+ 入力文字列のそぞれの文字を数え、数が大きい順に並べる以下
test CHANGED
@@ -1,10 +1,10 @@
1
- 以下数と文字の対応を数大きい順に並べ替えるプログラムを実行すると
1
+ 入力文字列それぞれの文字を数え、数が大きい順に並べる以下のプログラム
2
2
 
3
3
 
4
4
 
5
- ```ここに言語を入力
6
5
 
6
+
7
- #include <stdio.h>
7
+ ```ここに言語を入力#include <stdio.h>
8
8
 
9
9
  #include <math.h>
10
10
 
@@ -34,31 +34,29 @@
34
34
 
35
35
  a[i] = 0;
36
36
 
37
- b[i] =0;
37
+ b[i]=i;
38
38
 
39
39
  }
40
40
 
41
41
 
42
42
 
43
- a[97]=9;
43
+ // 文字数をカウント
44
44
 
45
- a[101]=10;
45
+ while(scanf("%c", &c)!=EOF) {
46
46
 
47
- a[105]=7;
47
+ if (c == '\n') continue; // 改行は無視
48
48
 
49
- a[111]=6;
49
+ if (c == ' ') continue; // スペースは無視
50
50
 
51
- a[114]=7;
51
+ a[c]++;
52
+
53
+ }
52
54
 
53
55
 
54
56
 
55
- for(i=0; i<26; i++) {
57
+ // カウントが1以上の文字のみ出力(文字 カウント)
56
58
 
57
- if(a[i+97]<=4) continue;
59
+
58
-
59
- printf("%c %d\n", (char)(i+97), a[i+97]);}
60
-
61
-
62
60
 
63
61
  for(i=0;i<26;i++){
64
62
 
@@ -90,13 +88,11 @@
90
88
 
91
89
 
92
90
 
93
- printf("\n");
94
-
95
91
  for(i=0; i<26; i++) {
96
92
 
97
- if(a[i+97]<=4) continue;
93
+ if(a[i+97]<=2) continue;
98
94
 
99
- printf("%c %d\n", (char)(b[i+97]), a[i+97]);
95
+ printf(" %c %2d\n", (char)(b[i+97]), a[i+97]);
100
96
 
101
97
  }
102
98
 
@@ -106,38 +102,42 @@
106
102
 
107
103
  }
108
104
 
105
+ ```
106
+
107
+ に同じ文字が同列で入力された場合
109
108
 
110
109
 
111
- ```
112
110
 
113
- a 9
111
+ 例えば
114
112
 
115
- e 10
113
+ tttttttssssmmmmmnnnnnkkkkkoooo
116
114
 
117
- i 7
115
+ と入力すると
118
116
 
119
- o 6
120
117
 
121
- r 7
122
118
 
123
-
119
+ t 7
124
120
 
125
- 10
121
+ m 5
126
122
 
127
- 9
123
+ n 5
128
124
 
129
- 7
125
+ k 5
130
126
 
131
- 7
127
+ s 4
132
128
 
133
- 6
129
+ o 4
134
130
 
135
-
131
+
136
132
 
137
- 数の大きい順に並べ替えられてますが
138
133
 
139
- 並べ替えられた左隣の数に対応するアルファベットが表示されません。
140
134
 
141
- どう直せば左隣数に対応するアルファベットが表示されるか
135
+ と出力されますが、同列m,n,kがアルファベット順ではないです。
142
136
 
137
+ s,oもアルファベット順に表示されません。
138
+
139
+
140
+
141
+ アルファベット順に表示するにはどう変更すればよいか
142
+
143
- ご存じの方よろしくお願い致します
143
+ ご存じの方よろしくお願い致します

1

不要削除

2020/08/03 09:45

投稿

KeiD
KeiD

スコア26

test CHANGED
File without changes
test CHANGED
@@ -45,12 +45,6 @@
45
45
  a[101]=10;
46
46
 
47
47
  a[105]=7;
48
-
49
- a[108]=3;
50
-
51
- a[109]=4;
52
-
53
- a[110]=4;
54
48
 
55
49
  a[111]=6;
56
50