ijklmの5文字の順列(120個)を以下のプログラムで出力表示すると
#include <stdio.h> char data[5]="ijklm"; char disp[5]="ijklm"; int flg[5]={0}; void sub(int num) { int i; if(num==5) printf("%s ",disp); else { for(i=0;i<5;i++) { if(!flg[i]) { flg[i]=1; disp[num]=data[i]; sub(num+1); flg[i]=0; } } } } int main() { sub(0); return 0; }
ijklm ijkml ijlkm ijlmk ijmkl ijmlk ikjlm ikjml ikljm iklmj ikmjl ikmlj iljkm iljmk ilkjm i
lkmj ilmjk ilmkj imjkl imjlk imkjl imklj imljk imlkj jiklm jikml jilkm jilmk jimkl jimlk jk
ilm jkiml jklim jklmi jkmil jkmli jlikm jlimk jlkim jlkmi jlmik jlmki jmikl jmilk jmkil jmk
li jmlik jmlki kijlm kijml kiljm kilmj kimjl kimlj kjilm kjiml kjlim kjlmi kjmil kjmli klij
m klimj kljim kljmi klmij klmji kmijl kmilj kmjil kmjli kmlij kmlji lijkm lijmk likjm likmj
limjk limkj ljikm ljimk ljkim ljkmi ljmik ljmki lkijm lkimj lkjim lkjmi lkmij lkmji lmijk
lmikj lmjik lmjki lmkij lmkji mijkl mijlk mikjl miklj miljk milkj mjikl mjilk mjkil mjkli m
jlik mjlki mkijl mkilj mkjil mkjli mklij mklji mlijk mlikj mljik mljki mlkij mlkji
と表示されますが、1行につき8個ずつ、15行で表示するために以下のように変更しましたが
#include <stdio.h> char data[5]="ijklm"; char disp[5]="ijklm"; int flg[5]={0}; void sub(int num) { int i; if(num==5) printf("%s ",disp); int cnt; \\追加した個所 はじめ cnt++; if(cnt % 8 == 0){ printf("\n");} \\追加した個所 終わり else { for(i=0;i<5;i++) { if(!flg[i]) { flg[i]=1; disp[num]=data[i]; sub(num+1); flg[i]=0; } } } } int main() { sub(0); return 0; }
出力は8個ずつ15行にはならず、
ljkim ljkmi ljmik
lkijm lkimj
lkmij lkmji
mijkl mijlk mikjl miklj
miljk milkj
mjkil mjkli mjlik
mkijl mkilj mkjil mkjli
mklij mklji mlijk
mljik mljki .....
のように表示されてしまいます。
8個ずつ15行で表示するにはどう直せばよいか
ご存じの方よろしくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/31 00:41