Algorithm --> 字母重排

字母重排

  输入一个字典(用***结尾),然后再输入若干单词。没输入一个单词w,都需要在字典中找出所有可以用w的字幕重排后得到的单词,并按照字典序从小到大的顺序在一行中输出,如果不存在,输出“:(”。单词间用空格隔开,且所有输入单词都由不超过6个小写字母组成。

样例输入:
tarp given score refund only trap work earn course *****
aptr asdfg
样例输出:
part tarp trap
:(

程序:

#include <iostream>
#include <cstring>
//#include <stdio.h>
#include <stdlib.h>
using namespace std;

char word[2000][10], sorted[2000][10];

//字符比较函数
int cmpString(const void *a, const void *b)
{
    return strcmp((char*)a, (char*)b);
}

//字符串比较函数
int cmpChar(const void *a, const void *b)
{
    return *(char*)a - *(char*)b;
}

int main()
{
    int n = 0;
    while(true)
    {
        cin >> word[n];
        if(word[n][0] == ‘*‘) break;                             //遇到结束标注就终止
        n++;
    }
    qsort(word, n, sizeof(word[0]), cmpString);               //给所有单词排序
    for(int i = 0; i < n; i++)
    {
        strcpy(sorted[i], word[i]);
        qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmpChar);  //给每个单词排序
    }

    char s[10];
    while(cin >> s)                              //读取字符串
    {
        qsort(s, strlen(s), sizeof(char), cmpChar);           //给输入单词排序
        bool found = false;
        for(int i = 0; i < n; i++)
        {
            if(!strcmp(sorted[i], s))
            {
                found = true;
                cout << word[i] << " ";                  //输出原始单词,而不是排序后的
            }
        }
        if(!found) cout << ":(";
        cout << endl;
    }
    return 0;
}
时间: 2024-10-10 03:56:01

Algorithm --> 字母重排的相关文章

5.3.2 字母重排

输入一个字典(用******结尾),然后再输入若干单词.每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:().输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定按字典序排列.样例输入:tarp given score refund only trap work earn course pepper part ******resco nfudre aptr sett o

POJ 3250:字母重排

AC CODE: import java.util.Scanner; public class Main { private static char[] ASCII = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' }; private static String getString() { Scanner input = new

算法篇——字母重排

来源:<算法竞赛入门经典>例题5.3.2 题目:输入一个字典(用******结尾),然后再输入若干单词.每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(  如果不存在,输出:(  ).输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定按字典序排列. 样例输入: tarp given score refund only trap work earn course pepper part

字母重排

输入一个字典(用******结尾),然后再输入若干单词.每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:().输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定按字典序排列. 样例输入: tarp given score refund only trap work earn course pepper part ****** resco nfudre aptr set

字母重排(字符串处理)

题目信息如下: 题意分析: 快速方法就是将字母先重排几次,然后在与输入的重拍后的数据进行比较,快速简单. 代码如下:(此解法详解析参考<算法竞赛入门>) #include<stdio.h> #include<string.h> #include<stdlib.h> int n; char a[2020][10],s[2020][10]; int cmp(const void *a,const void *b) { return *(char *)a-*(ch

字母重排(qsort)

#include<stdio.h>#include<string.h>#include<stdlib.h>char dir[2000][7]={0},sorted[2000][7]={0}; //要求一个单词最多有6个字母,所以数组第二维应该是7,放'\0',所以可以稍微放大点,防止出错 char w[10]={0}; //虽然要求6个,这里养成多写一下点的习惯 int cmp_char(const void* _a,const void* _b){ char* a=(

[code]字母重排

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include<stdio.h> #include<stdlib.h> #include<string.h> int n; char word[ 1000][10 ],sorted[ 

字母重拍

import java.util.Arrays; import java.util.Scanner; /** * 字母重排 * @author NEU-2015 * */ public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); String str; String[] words; String[] sort; String[] NeedFindWor

字符重排

输入一个字典(用******结尾),然后再输入若干单词.每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典次序从小到大的顺序在一行中输出(如果不存在,输出:}).输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定案子点序列排列. 样例输入: tarp given score refund only trap work earn course pepper part ****** resco nfudre aptr s