题目描述:点击打开链接

值得一提的是:这个问题调用了递归的方法来解决问题

另外,一开始的时候,我在cmp_char里面直接使用了return strcmp(*((char*)a),*((char*)b)); 却忘记了strcmp是要对比字符串,所以会往后扫描直到'\0',所以会访问他不该访问的内存,导致程序出错!这也说明了,写程序的时候,写完一个阶段,就去debug一下,这样可以减少最后再debug的时候带来的痛苦感觉。

解决方法:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>void solve();int main(){int t;int k;scanf("%d\n",&t);for(k=0;k<t;k++){printf("case #%d:\n",k);solve();}
}//1. 读入数据,保存到一个字符串数组里面str_in里面
//2. 找出str_in里面不同的字母,放在str_diff里面。个数就是stelen(str_diff),或者保存到num里面
//3. 对str_diff进行排序,变成升序,从str_diff[0]开始存放。
//4. 使用递归解决。int cmp_char(const void *a,const void *b){char c1[2],c2[2];c1[0] = *(char*)a;c2[0] = *(char*)b;c1[1] = '\0';c2[1] = '\0';return strcmp(c1,c2);
}void comb(char *s, char * t){char tt[17];if(*s){sprintf(tt,"%s%c",t,s[0]);printf("%s\n",tt);comb(s+1,tt);comb(s+1,t);}
}
void solve(){char str_in[17];char str_diff[17];char t[17];t[0] = '\0';int k,i;int num_diff;int flag;//initializationnum_diff = 0;k = 0;for(k=0;k<17;k++){str_diff[k] = -1;//先初始化为0,代表这个里面没有存放字符}flag = 0;//flag=0代表这个字符之前没有记录过scanf("%s",str_in);for(k=0; k < strlen(str_in); k++){flag = 0;for(i=0;i<num_diff;i++){if(str_diff[i] == str_in[k]){flag = 1;//这个字符之前就记录过了break;}}if(flag == 0){str_diff[num_diff++] = str_in[k];}}str_diff[num_diff] = '\0';qsort(str_diff,num_diff,sizeof(str_diff[0]),cmp_char);comb(str_diff,t);
}

华师大 OJ 3023相关推荐

  1. 华师大 OJ 2822

    题目链接:点击打开链接 这个OJ平台很傻,输出的时候,在一行的末尾少输出一个空格都可能会出错的. 代码 #include <stdio.h> #include <stdlib.h&g ...

  2. 华师大 OJ 3040

    题目描述:点击打开链接 这道题目还是一样的方法.使用分布的思想方法就可以了. 代码: #include <stdio.h> #include <stdlib.h> #inclu ...

  3. 华师大 OJ 3053

    题目链接:点击打开链接 这里要注意的是 1. long long 类型应该怎么输出 2. 题目的意思要准确地理解,有可能会出现11111111,这种边界情况,这个时候,这是要按照2进制来做的.所以要另 ...

  4. 华师大 OJ 3055

    题目描述:点击打开链接 值得一提的是,对这里的题目描述要理解准确. #include <stdio.h> #include <stdlib.h> #include <st ...

  5. 华师大 OJ 3026

    题目链接:点击打开链接 这个题目做了2个小时.这些代码的确是值得学习借鉴的. 解决方案: #include <string.h> #include <stdio.h>void ...

  6. 华师大 OJ 2897

    题目描述:点击打开链接 值得一提的是:需要把这个用来输出的字符串最后手动补上一个0, tmp[count]='\0'; 解决方法: #include <stdio.h> #include ...

  7. 华师大 OJ 3024

    题目描述:点击打开链接 值得一提的是,抽象数据类型定义好,然后把函数实现好. 解决代码: /****************************************************** ...

  8. 华师大 OJ 2850

    题目描述:点击打开链接 这个是真的简单 解决方案: #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  9. 华师大 OJ 2876

    题目描述:点击打开链接 这里要注意的是大整数进行除法的或者减法的时候,要记得判断当前大整数是不是大于0的. 因为我们这里定义的大整数只是自然数(N>=0) 解决方案: // 14:25--> ...

最新文章

  1. 为python安装numpy和scipy(federo)
  2. linux vino vnc,CentOS 远程桌面(vnc,vino)
  3. 计算机C语言知识点免费下载,全国计算机二级C语言知识点
  4. vue上传文件php,php文件上传 – 前端开发,JQUERY特效,全栈开发,vue开发
  5. Python 内置函数之 open (文件操作)
  6. STM32——EEPROM
  7. Jquery一些常用的方法
  8. 在 SSD 上使用 btrfs 文件系统的相关优化
  9. ui-router 路由重定向
  10. Visio 2016软件
  11. mt2503短信數量和定義的不一致
  12. O2O营销模式(Online To Offline)
  13. 生物信息-McScan(Python-jcvi)共线性画图
  14. 更改已生成的exe文件的ico图标
  15. IDC是什么意思,中小企业如何选择IDC机房?
  16. 博士申请 | 香港大学黄凯斌教授招收6G通信与机器学习方向全奖博士生
  17. 如何更改本地网页网址
  18. 共享鸡皮疙瘩?庆应大学开发了一种贴身设备,利用腕带和颈带数据,分享刺激感受...
  19. (Note)阿克西斯ACASIS DT-3608双盘位硬盘阵列盒RAID设置
  20. 《英语语法新思维 基础版2》读书笔记(一)

热门文章

  1. java 比较当前时间_java时间比较
  2. 三次多项式的因式分解
  3. 什么专业的人适合学嵌入式?
  4. si446使用记录(二):使用WDS3生成头文件
  5. [CIKM 2019]Balance in Signed Bipartite Networks
  6. 私有云是伪命题:真正的私有云 ≈ 公有云
  7. 调制解调器通常接在计算机系统,rj45和rj11有何区别
  8. 蓝牙耳机哪款好用?这些选购小技巧帮你选到更适合你的蓝牙耳机!
  9. Linux 进程挂起、恢复相关命令
  10. 下载spotify音乐_如何将Google Maps音乐控件用于Spotify,Apple Music或Google Play音乐