算法竞赛入门经典:第五章 基础题目选解 5.8 字母重排
来源:互联网 发布:c语言中的const 编辑:程序博客网 时间:2024/05/14 02:40
/*字母重排:输入一个字典(用******结尾),然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典顺序从小到大的顺序在一行中输出(如果不存在,输出:( )。输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列输入:trap given score refund only trap work earn course pepper part******resco nfudre aptr sett oresuc输出:scorefefundpart tarp trap:(course思路:其实是输入的单词的全排列,n个单词有n!种组合,然后将n!个新单词在字典中去搜一把,凡是搜到的就输出字典中的单词关键是确定全排列,例如resco,第一层从5个中选一个单词,第二层从剩余4个中选一个单词,关键是怎么选,可以用减枝标记,凡是选了的就不能再选不需要搞全排列,可以将字典中单词排序,输入的单词也排序,两者比较相等,说明输入的单词已经在字典中了考虑,有的单词输入都一样1 <stdlib.h>中的排序函数,void qsort(const void* buffer,size_t num,size_t size,int(* compare)(const void*,const void*))2 注意输出的顺序必须按照字典顺序,也就是说原来的输入字符串顺序也要先排 qsort(strDic,iCount,sizeof(strDic[0]),comp_str); qsort(strWord[j],strlen(strWord[j]),sizeof(char),comp_char); //比较的时候,字符串数组的个数为计数器的值,而每个字符数组的大小可用第一个字符数组大小表示3 int comp_str(const void* _a,const void* _b)//注意函数指针必须是与sort函数中const void*形参相同4 //iCount--;因为最后一次iCount累加没有加上5 while(EOF != scanf("%s",strDic[iCount]))//scanf会过滤空格 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXSIZE 100using namespace std;//int comp_str(const char* _ptrStrA,const char* _ptrStrB)int comp_str(const void* _a,const void* _b)//注意函数指针必须是与sort函数中const void*形参相同{char* pA = (char*) _a;char* pB = (char*) _b;return strcmp(pA,pB);}//int comp_char(const char* _a,const char* _b)int comp_char(const void* _a,const void* _b){char* a = (char*)_a;char* b = (char*)_b;return(*a - *b);}void input(){char strDic[MAXSIZE][7];//原有字典char str[MAXSIZE][7];//辅助数组,存放已经排序过的字典char strWord[MAXSIZE][7];int iCount = 0;while(EOF != scanf("%s",strDic[iCount]))//scanf会过滤空格{if(!strcmp("******", strDic[iCount]))//字符数组的比较不能用"******" == strDic[iCount]直接比较,必须用strcmp{break;}//对输入的单词排序//strcpy(str[iCount],strDic[iCount]);//sort(str[iCount],str[iCount] + strlen(str[iCount]));//qsort(str[iCount],strlen(str[iCount]),sizeof(char),comp_char);iCount++;}//单词组顺序进行排序//iCount--;因为最后一次iCount累加没有加上//sort(strDic,strDic + iCount);qsort(strDic,iCount,sizeof(strDic[0]),comp_str);//比较的时候,字符串数组的个数为计数器的值,而每个字符数组的大小可用第一个字符数组大小表示//拷贝后,再对每个单词进行排序for(int q = 0 ; q < iCount ; q++){strcpy(str[q],strDic[q]);sort(str[q],str[q] + strlen(str[q]));}//接下来对每个输入的单词进行判断int j = 0;while(EOF != scanf("%s",strWord[j])){//sort(strWord[j],strWord[j] + strlen(strWord[j]));qsort(strWord[j],strlen(strWord[j]),sizeof(char),comp_char);j++;}for(int m = 0; m < j;m++){bool isFind = false;for(int k = 0; k < iCount;k++){if(!strcmp(strWord[m],str[k])){printf("%s ",strDic[k]);isFind = true;//break;//因为还有单词会相同}}if(!isFind){printf("%s",":(");}printf("\n");}}int main(int argc,char* argv[]){input();system("pause");return 0;}
0 0
- 算法竞赛入门经典:第五章 基础题目选解 5.8 字母重排
- 算法竞赛入门经典 第五章 字母重排
- 算法竞赛入门经典-第五章字母重排
- 《算法竞赛入门经典》 第五章 基础题目选解
- 字母重排(算法竞赛入门经典)
- 算法竞赛入门经典:第五章 基础题目选解 5.1WERTYU
- 算法竞赛入门经典:第五章 基础题目选解 5.2 Tex
- 算法竞赛入门经典:第五章 基础题目选解 5.3 周期串
- 算法竞赛入门经典:第五章 基础题目选解 5.4 小学生算术
- 算法竞赛入门经典:第五章 基础题目选解 5.5 高精度乘法
- 算法竞赛入门经典:第五章 基础题目选解 5.6 数组模拟高精度乘法
- 算法竞赛入门经典:第五章 基础题目选解 5.7 6174问题
- 算法竞赛入门经典:第五章 基础题目选解 5.9 Cantor数
- 算法竞赛入门经典:第五章 基础题目选解 5.10 因子和阶乘
- 算法竞赛入门经典:第五章 基础题目选解 5.11果园里的树
- 算法竞赛入门经典:第五章 基础题目选解 5.12多少块土地
- 算法竞赛入门经典 5.3.2字母重排
- 算法竞赛入门 5.3.2 字母重排
- Longest Palindromic Substring
- itext导出word
- 畅通工程再续 HDU杭电1875 【Kruscal算法 || Prim】
- 【Android源码解析】 自定义可清除的输入框
- UDP传输协议的基本应用-发送和接收
- 算法竞赛入门经典:第五章 基础题目选解 5.8 字母重排
- 素数测试
- MySQL必知必会笔记(三)SELECT语句 联结表 高级联结 组合查询 全文本搜索
- fiddler stave插件
- Tomcat Session管理机制(Tomcat源码解析七)
- URAL2046 The First Day at School
- HDU 1060 Leftmost Digit
- 算法竞赛入门经典:第五章 基础题目选解 5.9 Cantor数
- phpStrom中svn的相关配置