xlwang_0903 发表于 2016-08-19 23:59

求教一个算法实现!

问题描述起来很简单:就是咱们的手机九宫格输入按键,如果输入数字组合,求输出所有字母的组合。如2键有字幕abc,3键有字母def,输入23,输出就是{"ad","ae","af","bd","be","bf","cd","ce","cf"}。求教一个C语言实现的代码,谢谢!

lxyscls 发表于 2016-08-20 05:47

char _2 = {'a', 'b', 'c'};
char _3 = {'d', 'e', 'f'};

int k = 0;
char r;

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      snprintf(r, 3, "%c%c", _2, _3);
    }
}

xlwang_0903 发表于 2016-08-20 08:36

回复 2# lxyscls
如果并不知道会输入几个数字的组合,那这个循环该如何设计呢?而且数字7和9还分别表示4个字母。

   

lxyscls 发表于 2016-08-20 10:33

本帖最后由 lxyscls 于 2016-08-20 10:33 编辑

回复 3# xlwang_0903     struct key {
      int num;
      char c;
    };

    struct key *_7 = malloc(sizeof(int)+4*sizeof(char));
    _7->num = 4; _7->c = '?'; _7->c = '?'; _7->c = '?'; _7->c = '?';
    for (int i = 0; i < _7->num; i++)
      ... ...
   

dorodaloo 发表于 2018-01-15 17:11

本帖最后由 dorodaloo 于 2018-01-16 18:06 编辑

保持好奇心多学习

dorodaloo 发表于 2018-01-16 18:05

本帖最后由 dorodaloo 于 2018-01-16 18:07 编辑

回复 1# xlwang_0903
我来写一个 #include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *key[] = {
    "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz",
};
void compose(char *keys);
void cpsFunc(unsigned index, char *keys, char *composedStr);

int main(int argc, char *argv[]) {
    char *test[] = {"001", "3", "02310", "23", "2b4", "357", "9925", "987654"};
    unsigned size = sizeof(test) / sizeof(char *);

    for (int i = 0; i < size; i++) {
      printf("input = %s\n", test);
      compose(test);
      printf("\n\n");
    }
}

void compose(char *keys) {
    unsigned size = strlen(keys);

    for (unsigned i = 0; i < size; i++)
      if (!isdigit(keys)) {
            fprintf(stderr, "'%c' NOT digit\n", keys);
            return;
      }
    char composedStr;
    memset(composedStr, 0, size + 1);
    cpsFunc(0, keys, composedStr);
}

void cpsFunc(unsigned index, char *keys, char *composedStr) {
    if (!*keys) {
      printf("%s ", composedStr);
      return;
    }
    if (!strlen(key[*keys - '0'])) {
      cpsFunc(index, keys + 1, composedStr);
      return;
    }

    for (char *alpha = key[*keys - '0']; *alpha; alpha++) {
      composedStr = *alpha;
      cpsFunc(index + 1, keys + 1, composedStr);
    }
}

页: [1]
查看完整版本: 求教一个算法实现!