質問編集履歴

2

暫定的な解決策

2022/01/03 08:45

投稿

marchan
marchan

スコア4

test CHANGED
File without changes
test CHANGED
@@ -251,3 +251,99 @@
251
251
  i=-1, j=5
252
252
 
253
253
  になることは想定されていないので途中から一見するとおかしな値が出力されていますが、それは仕様でありプログラムは正常に動作しています。
254
+
255
+ ### 暫定的な解決策
256
+
257
+ 回答してくれた方々を参考に、自分なりにコードを書いてみました。条件分岐の代わりに膨大な四則演算を用いていてかっこ悪いですが......
258
+
259
+
260
+
261
+ ```C
262
+
263
+ #include <stdio.h>
264
+
265
+ void nexthen(int v,int* i,int* j,int plus){
266
+
267
+ int k=(*j+plus==((v+*i)+(v-*i)*plus)/2);
268
+
269
+ *i+=plus*k;
270
+
271
+ *j=*j*(1-k)+((v+*i)-(v-*i)*plus)/2*k+plus;
272
+
273
+ }
274
+
275
+ int main(){
276
+
277
+ int v=6;
278
+
279
+ int i=3;
280
+
281
+ int j=4;
282
+
283
+ nexthen(v,&i,&j,1);if(i!=3||j!=5)printf("iは%d, jは%d\n",i,j);
284
+
285
+ nexthen(v,&i,&j,1);if(i!=4||j!=5)printf("iは%d, jは%d\n",i,j);
286
+
287
+ nexthen(v,&i,&j,1);if(i!=5||j!=6)printf("iは%d, jは%d\n",i,j);
288
+
289
+ nexthen(v,&i,&j,1);if(i!=5||j!=7)printf("iは%d, jは%d\n",i,j);
290
+
291
+ nexthen(v,&i,&j,1);if(i!=5||j!=8)printf("iは%d, jは%d\n",i,j);
292
+
293
+ nexthen(v,&i,&j,1);if(i!=5||j!=9)printf("iは%d, jは%d\n",i,j);
294
+
295
+ nexthen(v,&i,&j,1);if(i!=5||j!=10)printf("iは%d, jは%d\n",i,j);
296
+
297
+ nexthen(v,&i,&j,1);if(i!=5||j!=11)printf("iは%d, jは%d\n",i,j);
298
+
299
+ nexthen(v,&i,&j,1);if(i!=5||j!=12)printf("iは%d, jは%d\n",i,j);
300
+
301
+ nexthen(v,&i,&j,1);if(i!=5||j!=13)printf("iは%d, jは%d\n",i,j);
302
+
303
+ nexthen(v,&i,&j,1);if(i!=5||j!=14)printf("iは%d, jは%d\n",i,j);
304
+
305
+ printf("\n");
306
+
307
+ i=2;
308
+
309
+ j=3;
310
+
311
+ nexthen(v,&i,&j,-1);if(i!=1||j!=5)printf("iは%d, jは%d\n",i,j);
312
+
313
+ nexthen(v,&i,&j,-1);if(i!=1||j!=4)printf("iは%d, jは%d\n",i,j);
314
+
315
+ nexthen(v,&i,&j,-1);if(i!=1||j!=3)printf("iは%d, jは%d\n",i,j);
316
+
317
+ nexthen(v,&i,&j,-1);if(i!=1||j!=2)printf("iは%d, jは%d\n",i,j);
318
+
319
+ nexthen(v,&i,&j,-1);if(i!=0||j!=5)printf("iは%d, jは%d\n",i,j);
320
+
321
+ nexthen(v,&i,&j,-1);if(i!=0||j!=4)printf("iは%d, jは%d\n",i,j);
322
+
323
+ nexthen(v,&i,&j,-1);if(i!=0||j!=3)printf("iは%d, jは%d\n",i,j);
324
+
325
+ nexthen(v,&i,&j,-1);if(i!=0||j!=2)printf("iは%d, jは%d\n",i,j);
326
+
327
+ nexthen(v,&i,&j,-1);if(i!=0||j!=1)printf("iは%d, jは%d\n",i,j);
328
+
329
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=5)printf("iは%d, jは%d\n",i,j);
330
+
331
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=4)printf("iは%d, jは%d\n",i,j);
332
+
333
+ nexthen(v,&i,&j,-1);if(i!=-1||j!=3)printf("iは%d, jは%d\n",i,j);
334
+
335
+ printf("end\n");
336
+
337
+ }
338
+
339
+ ```
340
+
341
+ 実行結果
342
+
343
+ ```
344
+
345
+
346
+
347
+ end
348
+
349
+ ```

1

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

2022/01/03 08:45

投稿

marchan
marchan

スコア4

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