忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2908 | 回复: 6

[C] 求教一个算法实现! [复制链接]

论坛徽章:
0
发表于 2016-08-19 23:59 |显示全部楼层
问题描述起来很简单:就是咱们的手机九宫格输入按键,如果输入数字组合,求输出所有字母的组合。如2键有字幕abc,3键有字母def,输入23,输出就是{"ad","ae","af","bd","be","bf","cd","ce","cf"}。求教一个C语言实现的代码,谢谢!

论坛徽章:
13
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15摩羯座
日期:2014-07-21 10:11:28
发表于 2016-08-20 05:47 |显示全部楼层
  1. char _2[3] = {'a', 'b', 'c'};
  2. char _3[3] = {'d', 'e', 'f'};

  3. int k = 0;
  4. char r[9][3];

  5. for (int i = 0; i < 3; i++) {
  6.     for (int j = 0; j < 3; j++) {
  7.         snprintf(r[k++], 3, "%c%c", _2[i], _3[j]);
  8.     }
  9. }
复制代码

论坛徽章:
0
发表于 2016-08-20 08:36 |显示全部楼层
回复 2# lxyscls
如果并不知道会输入几个数字的组合,那这个循环该如何设计呢?而且数字7和9还分别表示4个字母。

   

论坛徽章:
13
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15摩羯座
日期:2014-07-21 10:11:28
发表于 2016-08-20 10:33 |显示全部楼层
本帖最后由 lxyscls 于 2016-08-20 10:33 编辑

回复 3# xlwang_0903
  1.     struct key {
  2.         int num;
  3.         char c[0];
  4.     };

  5.     struct key *_7 = malloc(sizeof(int)+4*sizeof(char));
  6.     _7->num = 4; _7->c[0] = '?'; _7->c[1] = '?'; _7->c[2] = '?'; _7->c[3] = '?';
  7.     for (int i = 0; i < _7->num; i++)
  8.         ... ...
  9.    
复制代码

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
发表于 2018-01-15 17:11 |显示全部楼层
本帖最后由 dorodaloo 于 2018-01-16 18:06 编辑

保持好奇心多学习

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
发表于 2018-01-16 18:05 |显示全部楼层
本帖最后由 dorodaloo 于 2018-01-16 18:07 编辑

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

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

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

  13.     for (int i = 0; i < size; i++) {
  14.         printf("input = %s\n", test[i]);
  15.         compose(test[i]);
  16.         printf("\n\n");
  17.     }
  18. }

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

  21.     for (unsigned i = 0; i < size; i++)
  22.         if (!isdigit(keys[i])) {
  23.             fprintf(stderr, "'%c' NOT digit\n", keys[i]);
  24.             return;
  25.         }
  26.     char composedStr[size + 1];
  27.     memset(composedStr, 0, size + 1);
  28.     cpsFunc(0, keys, composedStr);
  29. }

  30. void cpsFunc(unsigned index, char *keys, char *composedStr) {
  31.     if (!*keys) {
  32.         printf("%s ", composedStr);
  33.         return;
  34.     }
  35.     if (!strlen(key[*keys - '0'])) {
  36.         cpsFunc(index, keys + 1, composedStr);
  37.         return;
  38.     }

  39.     for (char *alpha = key[*keys - '0']; *alpha; alpha++) {
  40.         composedStr[index] = *alpha;
  41.         cpsFunc(index + 1, keys + 1, composedStr);
  42.     }
  43. }
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP