2 solutions

  • 0
    @ 2021-10-30 11:32:37

    P1151 night的奇妙冒险之菱形宝石 题解

    题意分析:

    本题的基本思路就是简单字符串匹配加上打印菱形。由于字符串的长度很小,所以可以用暴力匹配,即主串和模式串一个字符一个字符的匹配,如果匹配成功则计数器加一,模式串的匹配指针指向开头,然后接着主串匹配;如果匹配失败,就模式串从头与主串的下一个字符开始匹配。如果具体情况还是不懂,就去上网详细查找资料或者问问自己的师傅。 本题的重点其实是菱形的打印,这个需要花费一定的时间找到规律,可以先假设打印的是实心菱形,每一行先打印空格然后再打印星号,规律就确定了每一行需要先打印多少空格再打印多少星号,想打印出空心就在实心的基础上在打印星号的地方加上一个判断,即根据规律在特定的地方打上星号其他的地方就打印空格。具体的规律多举几个例子归纳即可得出。

    参考代码:

    #include <bits/stdc++.h>
    using namespace std;
    char S[100],T[100];
    int main() {
    	int N;
    	cin >> N;
    	while (N--) {
    	cin >> S >> T;
    	int i = 0, j = 0;
    	int ans = 0;
    	while (i < strlen(S)) {
    		if (S[i] == T[j]) {
    			i++;
    			j++;
    		}
    		else {
    			i = i - j + 1;
    			j = 0;
    		}
    		if (j == strlen(T)) {
    			ans++;
    			j = 0;
    		}
    	}
    	if (ans == 0 || ans == 1) {
    		cout << "构造失败!" << endl; 
    		continue;
    	}
    	int totalLevel;
        totalLevel = ans;
            int f = 0;
            for (int i = 1; i <= totalLevel; i++) {
                if (i == totalLevel && f == 0) { //打印完上部分开始打印下部分
                    i = 0;
                    f = 1;
                    continue;
                }
                if (f == 0) {   //上三角形
                    for (int j = 1; j <= totalLevel - i; j++) {     //打出空格
                        cout << " ";
                    }
                    for (int j = 1; j <= 2 * i - 1; j++) {  //打出星号,中间留空
                        if (j == 1 || j == 2 * i - 1) {
                            cout << "*";
                        }
                        cout << " ";  
                    }
                    cout <<endl;
                }
                if (f == 1) {   //下三角形
                    for (int j = 1; j <= i - 1; j++) {
                       cout << " ";
                    }
                    for (int j = 1; j <= 2 * (totalLevel + 1 - i) - 1; j++) {
                        if (j == 1 || j == 2 * (totalLevel + 1 - i) - 1) {
                            cout << "*";
                        }
                        cout << " ";
                    }
                    cout <<endl;
                }
            }
        }
    }
    

    Information

    ID
    147
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    9
    Tags
    # Submissions
    101
    Accepted
    7
    Uploaded By