以下のように元々
char data[5]="ijklm";
char disp[5]="ijklm";
と並べ替える文字を与えている場合は以下のプログラム
#include <stdio.h> char data[5]="ijklm"; char disp[5]="ijklm"; int flg[5]={0}; void sub(int num) { static int cnt = 0; if (num == 5) { printf("%s ",disp); cnt++; if (cnt % 8 == 0) { printf("\n"); cnt = 0; } return; } for (int 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; }
を実行すると
ikljm iklmj ikmjl ikmlj iljkm iljmk ilkjm ilkmj
ilmjk ilmkj imjkl imjlk imkjl imklj imljk imlkj
jiklm jikml jilkm jilmk jimkl jimlk jkilm jkiml
jklim jklmi jkmil jkmli jlikm jlimk jlkim jlkmi
jlmik jlmki jmikl jmilk jmkil jmkli jmlik jmlki
kijlm kijml kiljm kilmj kimjl kimlj kjilm kjiml
kjlim kjlmi kjmil kjmli klijm 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 mjlik mjlki mkijl mkilj mkjil mkjli
mklij mklji mlijk mlikj mljik mljki mlkij mlkji
と15行8列の出力がでるのですが
上記プログラムを下記のように改良し、5文字を入力するようにすると
#include <stdio.h> void sub(int num) { char* data[5]; char* disp[5]; int flg[5]={0}; static int cnt = 0; if (num == 5) { printf("%s ",disp); cnt++; if (cnt % 8 == 0) { printf("\n"); cnt = 0; } return; } for (int i = 0; i < 5; i++) { if (!flg[i]) { flg[i] = 1; disp[num] = data[i]; sub(num + 1); flg[i] = 0; } } } int main(){ char* data[5]; char* disp[5]; scanf("%s %s",&data, &disp); sub(0); return 0; }
ijklmと入力すると空白が出力されて、元からijklmが与えられていたプログラムと同じ出力になりません。
どう直せばよいがご存じの方よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー