2017年4月10日 星期一

ITSA 53 - [Problem 5] String - 參考答案

Difficulty: Medium
Ref: ITSA 53 - [Problem 5] String
/*******************************************************/
/* ITSA 53 - [Problem 5] String                        */
/* Author: awei0905  [at]  awei0905.blogspot.tw        */
/* Version: 2017/04/10                                 */
/*******************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

char buf[81], table[81][10] = { 0 }, output[81], vowel[] = { 'a', 'e', 'i', 'o', 'u' };
int K;

void lookup(int cursor) {
 if (table[cursor][0] == 0) {
  output[cursor] = '\0';
  if (--K)
   printf("%s\n", output);
  else
   printf("%s*\n", output);
 }
 if (table[cursor][0] == 1)
  for (int i = 0; i < 5; i++) {
   output[cursor] = vowel[i];
   lookup(cursor + 1);
  }
 else
  for (int i = 0; table[cursor][i] != '\0'; i++) {
   output[cursor] = table[cursor][i];
   lookup(cursor + 1);
  }
}

int main() {
 int indexX = 0, indexY;
 scanf("%s%d", buf, &K);
 for (int i = 0; buf[i] != '\0'; i++) {
  indexY = 0;
  if (buf[i] == '[')
   for (i++; buf[i] != ']'; i++)
    table[indexX][indexY++] = buf[i];
  else if (buf[i] == '*')
   table[indexX][0] = 1;
  else
   table[indexX][0] = buf[i];
  indexX++;
 }
 for (int i = 0; table[i][0] != '\0'; i++) {
  for (int j = 0; table[i][j + 1] != '\0'; j++) {
   for (int k = j + 1; table[i][k] != '\0'; k++) {
    if (table[i][j] > table[i][k]) {
     int temp = table[i][j]; table[i][j] = table[i][k]; table[i][k] = temp;
    }
   }
  }
 }
 lookup(0);
}
Debug: I/O
[za]xd** 21
axdaa
axdae
axdai
axdao
axdau
axdea
axdee
axdei
axdeo
axdeu
axdia
axdie
axdii
axdio
axdiu
axdoa
axdoe
axdoi
axdoo
axdou
axdua*
axdue
axdui
axduo
axduu
zxdaa
zxdae
zxdai
zxdao
zxdau
zxdea
zxdee
zxdei
zxdeo
zxdeu
zxdia
zxdie
zxdii
zxdio
zxdiu
zxdoa
zxdoe
zxdoi
zxdoo
zxdou
zxdua
zxdue
zxdui
zxduo
zxduu

沒有留言:

張貼留言