前提・実現したいこと
ソースコードの簡略化を目指しており、
期待出力結果が以下の時に、
「
1
2
3
4
4
3
2
1
」
コメント分にある「同等の式」の個所を同じソースコードで記述したいのですが、
いいアイディアはございませんでしょうか?
それとも、そもそも1行では実現できないですかね...
該当のソースコード
C
1int main( void ) 2{ 3 4 for( int8_t i = 1; i < 5; i++ ) { 5 printf("%d " , i ); //同等の式 6 printf("\n" ); 7 } 8 9 printf("\n" ); 10 11 for( int8_t i = -1; i > -5; i-- ) { 12 printf("%d " , 5+i ); //同等の式 13 printf("\n" ); 14 } 15 16}- リスト
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
ベストアンサー
C
1#include <stdio.h> // printf 2#include <stdlib.h> // abs 3 4int main() { for (int i = 5; --i > -5; printf("%d\n"+(2*!i), 5 - abs(i))); }
追記
1行で書くなら、
int abs(int), printf(const char *, ...); int main() { for (int i = -5; ++i < 5; printf("%d\n"+!i+!i, 5 - abs(i))); }
追記2
コメント分にある「同等の式」の個所を同じソースコードで記述したいのですが、
その行以外は変更しないのでしょうか? それなら、
C
1 printf("%d " , (5-i)/5*5+i ); //同等の式
追記3
究極の 1行コード
C
1main(){puts("1\n2\n3\n4\n\n4\n3\n2\n1");}
追記4
ソースコードの簡略化を目指しており、
お尋ねします。
ソースコードの簡略化を目指しているのなら、
なぜ printf("%d " , i ); printf("\n" );
のように printf を 2つに分けて書くのですか?
printf("%d\n", i);
で十分なのに。
ソースコードの簡略化を目指しているのなら、
なぜ、for( int8_t i = -1; i > -5; i-- ) {
のように i の値を負の値にするんですか?
for (int8_t i = 4; i > 0; i--) {
とすれば、printf も最初の forループと
同じ形で書けるのに。
投稿2020/08/20 12:22
編集2020/08/20 23:54総合スコア8224
0
皆様回答ありがとうございます。
kazuma-s様の追記2のご回答により、本問題を解決することができました。
私の質問の意図としましては、
同等の式の部分の可変引数部を一つの式で行いたかったので質問させていただきました。
それ以外の部分は、本サイトに投稿するためわかりやすく記述したつもりだったのですが、
逆に本来の意図が分かりにくい形となってしまいました。
今回私の質問が拙い中、多くの知恵をお貸しいただきありがとうございました。
投稿2020/08/26 07:46
総合スコア3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
マジックナンバーと三項演算子使っていいならこれでもいけます。
c
1#include <stdio.h> 2#include <stdint.h> 3 4int main( void ){ 5 for( int8_t i = 1; i < 5; ++i )i==4 ? printf("%d \n\n" , i ) : printf("%d \n" , i ); 6 for( int8_t i = -1; i > -5; --i )printf("%d \n" , 5+i ); 7}
追記: 一行版
c
1#include <stdio.h> 2#include <stdint.h> 3 4int main( void ){ 5 for( int8_t i = 1; i < 9; ++i )i>=4 ? i==4 ? printf("%d \n\n" , i ) : printf("%d \n" , (i-9)*-1 ) : printf("%d \n" , i ); 6}
投稿2020/08/20 12:34
編集2020/08/20 13:05退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C++
1#include <stdio.h> 2 3int main(void) { 4 int N = 4; 5 for( int i = 0; i < N*2+1; i++) i < N ? printf("%d\n", i+1) : i == N ? printf("\n") : printf("%d\n", N*2+1-i); 6 return 0; 7}
投稿2020/08/20 11:41
編集2020/08/20 11:42総合スコア38341
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C
1int t[] = {1,2,3,4,0,4,3,2,1}; 2for(int n=0;n<9;n++){ 3 int i=t[n] && 4 printf("%d ",i); 5 printf("\n" ); 6}
こういう事??
「同等の式」の個所を同じソースコードで記述したい
の意味がいまいちわからない…
その部分はコードをいじってはダメなのか。
その部分だけを同等の別の式に置き換えたいのか。
単純に、2か所のその部分を同じ書き方にしたい、なのか。
コメントの付いた行を書き換えて良くて、配列を使うのはズルいなら。こうかなー?
単一ループで。
C
1for(int i=-4; i<5; i++){ 2 i && printf("%d ",5-(i<0?-i:i)); 3 printf("\n" ); 4}
absを使っていいなら。真ん中はi && printf("%d ",5-abs(i));
にするとスッキリする。
投稿2020/08/20 11:16
編集2020/08/20 12:51総合スコア1218
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
えーと...
C
1#include <stdio.h> 2#include <stdint.h> 3 4int main() { 5 6 int delta = 1; 7 int n = 1; 8 for( int8_t i = 1; i < 10; i++ ) { 9 if ( i == 5 ) { 10 delta = -1; 11 } else { 12 printf("%d" , n ); 13 } 14 printf("\n" ); 15 n += delta; 16 } 17 return 0; 18}
投稿2020/08/20 11:11
総合スコア16612
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。