字母转换

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。例如TROT 到 TORT:
[
i i i i o o o o
i o i i o o i o
]

输入

给定两个字符串,第一个字符串是源字符串,第二个字符是目标目标字符串。

输出

所有的进栈和出栈序列,输出结果需满足字典序

输入样例

madam adamm

bahama bahama

long short

eric rice

输出样例

[ i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ]

[ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i i o o o i o i o i o i o i o i o ]

[ ]

[ i i o i o i o o ]

提示:

采用回溯的方法

#include <iostream>
#include <string.h>
#include <stack>
using namespace std;
stack<char> minestack;
char data[25];
char plan[100];
char temp[100];
string aim;
string known;

bool TestPlan(int length)
{
    //cout<<"Enter"<<endl;
    int pos1 = 0,pos2 = 0;
    for(int i = 0;i < length; i++)
    if(plan[i]==‘i‘)
    {
        minestack.push(known[pos1]);
        pos1++;
    }
    else
    {
        if(!minestack.empty())
        {
            temp[pos2] = minestack.top();
            minestack.pop();
            pos2++;
        }
        else
        return false;
    }
    for(int i = 0;i < length/2;i++)
        if(temp[i]!=aim[i])
            return false;
    return true;

}

bool CountNum(int length)
{
    //cout<<"hello"<<endl;
    if(plan[0]==‘o‘)
    return false;
    int count = 0;
        for(int i = 0;i < length;i++)
            if(plan[i]==‘i‘)
                count++;
    if(count*2==length)
        return true;
    else
        return false;
}

void FindPlan(int length,int pos)
{
    if(pos==length)
    {
        if(CountNum(length))
        {
            if(TestPlan(length))
            {
                for(int i = 0;i < length;i++)
                    cout<<plan[i]<<" ";
                cout<<endl;
            }

        }

    }
    else
    {
        plan[pos] = ‘i‘;
        FindPlan(length,pos+1);
        plan[pos] = ‘o‘;
        FindPlan(length,pos+1);
    }
}

int main()
{
    cin>>known>>aim;
    //stack<char> minestack;
    //minestack.push(known[0]);
    //cout<<minestack.top()<<endl;
    int pos = 0;
    FindPlan(2*known.length(),pos);
    return 0;
}
时间: 2024-08-30 15:08:37

字母转换的相关文章

tolower(将大写字母转换成小写字母)

/*tolower(将大写字母转换成小写字母) 相关函数 isalpha,toupper 表头文件 #include<stdlib.h> 定义函数 int tolower(int c); 函数说明 若参数c为大写字母则将该对应的小写字母返回. 返回值 返回转换后的小写字母,若不须转换则将参数c值返回. 附加说明 范例*/ /* 将s字符串内的大写字母转换成小写字母*/ #include<ctype.h> main() { char s[]="aBcDeFgH12345;!

toupper(将小写字母转换成大写字母)

/*toupper(将小写字母转换成大写字母) 相关函数 isalpha,tolower 表头文件 #include<ctype.h> 定义函数 int toupper(int c); 函数说明 若参数c为小写字母则将该对映的大写字母返回. 返回值 返回转换后的大写字母,若不须转换则将参数c值返回. 附加说明 范例 */ /* 将s字符串内的小写字母转换成大写字母 */ #include<ctype.h> main() { char s[]="aBcDeFgH12345;

c语言代码编程题汇总:将字符串中的大写字母转换成小写字母

将字符串中的大写字母转换成小写字母 程序代码如下: 1 /* 2 2017年3月8日21:21:46 3 功能:将字符串中的大写字母转换成小写字母 4 */ 5 /* 6 #include"stdio.h" 7 8 int main() 9 { 10 int n = 0; 11 12 char a[100]; 13 14 printf("please input a string:"); 15 16 gets(a); 17 18 for(int i = 0 ;a[i

C#字母转换成数字/数字转换成字母 - ASCII码转换

字母转换成数字 byte[] array = new byte[1];   //定义一组数组arrayarray = System.Text.Encoding.ASCII.GetBytes(string); //string转换的字母int asciicode = (short)(array[0]); ASCII码 = Convert.ToString(asciicode); //将转换一的ASCII码转换成string型 数字转换成字母byte[] array = new byte[1];ar

HDOJ/HDU 1161 Eddy&#39;s mistakes(大写字母转换成小写字母)

Problem Description Eddy usually writes articles ,but he likes mixing the English letter uses, for example "computer science" is written frequently "coMpUtEr scIeNce" by him, this mistakes lets Eddy's English teacher be extremely disco

c语言字符串大小写字母转换

输入一个以#结束的字符串,本题要求将小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其它字符不变. 输入格式: 输入在一行中给出一个长度不超过40的.以#结束的非空字符串. 输出格式: 在一行中按照要求输出转换后的字符串. 输入样例: Hello World! 123# 输出样例: hELLO wORLD! 123 源代码: #include <stdio.h> int main (){      char ch;  do{        ch=getchar();        i

首字母转换成大写

/*输入一英文句子,将其中所有单词首字符转换成大写后输出*/ #include<stdio.h>#include<string.h> char *toupper(char *str){ char *p=str; int len=strlen(str); if(*p==' ') //消除前面空格 { p++; len--; } if(*p>96&&*p<123) //判断第一个字母 { *p=*p-32; } while(len-->=0) //遍历

Excel行列数字字母转换实现

背景: Excel的列索引使用的是字母索引,某些开发中需要我们自己转换为数字,或者将数字转换为字母,比如基于Excel的公式,用户经常输入A1来表示引用Cell(0,0)的值.这时候我们需要把A转换为数字索引号:在显示的时候我们需要把0,0这样的坐标转换为A1显示,就需要把数字索引转换为字母索引.比如下面是LZ正做的一个项目,用到的: 废话不多说,直接看实现,下面是基于JavaScript的实现(转换为Java语言很容易),算法不做描述了,其实就是一个26进制的转换,可以参考16进制转换算法.

python首字母转换成大写函数

现在有个需求: 假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list: 输入:['adam', 'LISA', 'barT']            输出:['Adam', 'Lisa', 'Bart'] 原先想法是将字符分离,第一个转换为大写,其余转换为小写: def format_name(s):     return "%s" % (s[:1].upper() +