teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

暫定的な解決策

2022/01/03 08:45

投稿

marchan
marchan

スコア4

title CHANGED
File without changes
body CHANGED
@@ -124,4 +124,52 @@
124
124
  入力がi=5, j=6
125
125
 
126
126
  i=-1, j=5
127
- になることは想定されていないので途中から一見するとおかしな値が出力されていますが、それは仕様でありプログラムは正常に動作しています。
127
+ になることは想定されていないので途中から一見するとおかしな値が出力されていますが、それは仕様でありプログラムは正常に動作しています。
128
+ ### 暫定的な解決策
129
+ 回答してくれた方々を参考に、自分なりにコードを書いてみました。条件分岐の代わりに膨大な四則演算を用いていてかっこ悪いですが......
130
+
131
+ ```C
132
+ #include <stdio.h>
133
+ void nexthen(int v,int* i,int* j,int plus){
134
+ int k=(*j+plus==((v+*i)+(v-*i)*plus)/2);
135
+ *i+=plus*k;
136
+ *j=*j*(1-k)+((v+*i)-(v-*i)*plus)/2*k+plus;
137
+ }
138
+ int main(){
139
+ int v=6;
140
+ int i=3;
141
+ int j=4;
142
+ nexthen(v,&i,&j,1);if(i!=3||j!=5)printf("iは%d, jは%d\n",i,j);
143
+ nexthen(v,&i,&j,1);if(i!=4||j!=5)printf("iは%d, jは%d\n",i,j);
144
+ nexthen(v,&i,&j,1);if(i!=5||j!=6)printf("iは%d, jは%d\n",i,j);
145
+ nexthen(v,&i,&j,1);if(i!=5||j!=7)printf("iは%d, jは%d\n",i,j);
146
+ nexthen(v,&i,&j,1);if(i!=5||j!=8)printf("iは%d, jは%d\n",i,j);
147
+ nexthen(v,&i,&j,1);if(i!=5||j!=9)printf("iは%d, jは%d\n",i,j);
148
+ nexthen(v,&i,&j,1);if(i!=5||j!=10)printf("iは%d, jは%d\n",i,j);
149
+ nexthen(v,&i,&j,1);if(i!=5||j!=11)printf("iは%d, jは%d\n",i,j);
150
+ nexthen(v,&i,&j,1);if(i!=5||j!=12)printf("iは%d, jは%d\n",i,j);
151
+ nexthen(v,&i,&j,1);if(i!=5||j!=13)printf("iは%d, jは%d\n",i,j);
152
+ nexthen(v,&i,&j,1);if(i!=5||j!=14)printf("iは%d, jは%d\n",i,j);
153
+ printf("\n");
154
+ i=2;
155
+ j=3;
156
+ nexthen(v,&i,&j,-1);if(i!=1||j!=5)printf("iは%d, jは%d\n",i,j);
157
+ nexthen(v,&i,&j,-1);if(i!=1||j!=4)printf("iは%d, jは%d\n",i,j);
158
+ nexthen(v,&i,&j,-1);if(i!=1||j!=3)printf("iは%d, jは%d\n",i,j);
159
+ nexthen(v,&i,&j,-1);if(i!=1||j!=2)printf("iは%d, jは%d\n",i,j);
160
+ nexthen(v,&i,&j,-1);if(i!=0||j!=5)printf("iは%d, jは%d\n",i,j);
161
+ nexthen(v,&i,&j,-1);if(i!=0||j!=4)printf("iは%d, jは%d\n",i,j);
162
+ nexthen(v,&i,&j,-1);if(i!=0||j!=3)printf("iは%d, jは%d\n",i,j);
163
+ nexthen(v,&i,&j,-1);if(i!=0||j!=2)printf("iは%d, jは%d\n",i,j);
164
+ nexthen(v,&i,&j,-1);if(i!=0||j!=1)printf("iは%d, jは%d\n",i,j);
165
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=5)printf("iは%d, jは%d\n",i,j);
166
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=4)printf("iは%d, jは%d\n",i,j);
167
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=3)printf("iは%d, jは%d\n",i,j);
168
+ printf("end\n");
169
+ }
170
+ ```
171
+ 実行結果
172
+ ```
173
+
174
+ end
175
+ ```

1

タイトルをより適切なものへと変更

2022/01/03 08:45

投稿

marchan
marchan

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- C言語の場合減らすテクニック
1
+ C言語でほぼ同じ2か所分を1つにまとめたい
body CHANGED
File without changes