【模拟】HDU-1462 Word Crosses

【模拟】HDU-1462 Word Crosses_第1张图片
【模拟】HDU-1462 Word Crosses_第2张图片

注解

1、模拟题,要看清楚题目要求,仔细想各种情况。
2、两个单词的word cross,要从第一个单词的第一个字母开始遍历,找到该字母在第二个单词中是否有出现,有出现的第一个字母就是符合题目要求的。
3、由于是两对单词放在一行输出,因此分为两种情况,首先求出index和index2数组,然后分为以下几部分分别输出:(1)上方只含有1个字母的部分;(2)上方含有2个字母的部分;(3)水平单词;(4)下方含有2个字母的部分;(5)下方只含有1个字母的部分。

代码

#include 

using namespace std;

int isFirst = 1;
string s[2], s2[2];
int index[2], index2[2];

void findIndex(string s[], int index[]) {
    index[0] = -1;
    index[1] = -1;
    int len = s[0].length();
    for(int i=0; i<len; i++) {
        char c = s[0].at(i);
        int cpos = s[1].find(c);
        if(cpos!=-1) {
            index[1] = cpos;
            index[0] = i;
            break;
        }
    }
}

void printSpace(int start, int end) {
    for(int i=start; i<end; i++) {
        cout<<" ";
    }
}

void printHori() {
    cout<<s[0]<<"   "<<s2[0]<<endl;
}

void printChar(char c, int flag) {
    cout<<c;
    if(flag) {
        cout<<endl;
    }
}

void printOther(int i, int j) {
    while( i<s[1].length() || j<s2[1].length() ) {
        if(i<s[1].length() && j<s2[1].length()) {
            printSpace(0, index[0]);
            printChar(s[1].at(i++), 0);
            printSpace(0, s[0].length()-index[0]+2+index2[0]);
            printChar(s2[1].at(j++), 1);
        } else if(i<s[1].length()) {
            printSpace(0, index[0]);
            printChar(s[1].at(i++), 1);
        } else {
            printSpace(0, s[0].length()+3+index2[0]);
            printChar(s2[1].at(j++), 1);
        }
    }
}

int main() {

    cin>>s[0];

    while(s[0].compare("#")) {

        if(isFirst) {
            isFirst = 0;
        } else {
            cout<<endl;
        }
        cin>>s[1]>>s2[0]>>s2[1];

        findIndex(s, index);
        findIndex(s2, index2);

        if(index[1]==-1 || index2[1]==-1) {
            cout<<"Unable to make two crosses"<<endl;
        } else {
            int i = 0;
            int j = 0;
            if(index[1]>=index2[1]) {

                int diff = index[1]-index2[1];

                for(i=0; i<diff; i++) {
                    printSpace(0, index[0]);
                    printChar(s[1].at(i), 1);
                }

                for(i=diff; i<index[1]; i++) {
                    printSpace(0, index[0]);
                    printChar(s[1].at(i), 0);
                    printSpace(0, s[0].length()-index[0]+2+index2[0]);
                    printChar(s2[1].at(j++), 1);
                }

                printHori();
                i++;
                j++;

                printOther(i, j);

            } else {
                int diff = index2[1]-index[1];

                for(j=0; j<diff; j++) {
                    printSpace(0, s[0].length()+3);
                    printSpace(0, index2[0]);
                    printChar(s2[1].at(j), 1);
                }

                for(i=0; i<index[1]; i++) {
                    printSpace(0, index[0]);
                    printChar(s[1].at(i), 0);
                    printSpace(0, s[0].length()-index[0]+2+index2[0]);
                    printChar(s2[1].at(j++), 1);
                }

                printHori();
                i++;
                j++;

                printOther(i, j);

            }
        }

        cin>>s[0];
    }

    return 0;
}

结果

在这里插入图片描述

你可能感兴趣的:(hdu)