P7227题解

· · 题解

此解不是正解!

思路

我们当然是输出的单词越少越好,但是输出的单词不能到a,要到max(a,\frac{b}{2})。然后可以定义一个计数器sum用来记一共输出的数量,如果到了max(a,\frac{b}{2})return 0;。然后我的暴力做法就是不停循环,一开始是1重循环,后来是2重循环…………直到sum==max(a,\frac{b}{2})return 0;

不多说了,上代码!

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main() {
    int a,b,c,sum=0;
    cin>>a>>b;
    c=b>>1;
    for(char i='a'; i<='z'; ++i) {
        ++sum;
        if(sum-1==max(c,a))
            return 0;
        cout<<i<<' ';
    }
    for(char j='a'; j<='z'; ++j) {

        for(char i='a'; i<='z'; ++i) {
            ++sum;
            if(sum-1==max(c,a))
                return 0;
            cout<<j<<i<<' ';
        }
    }
    for(char t='a'; t<='z'; ++t) {

        for(char j='a'; j<='z'; ++j) {

            for(char i='a'; i<='z'; ++i) {
                ++sum;
                if(sum-1==max(c,a))
                    return 0;
                cout<<t<<j<<i<<' ';
            }
        }
    }
    for(char y='a'; y<='z'; ++y) {

        for(char t='a'; t<='z'; ++t) {

            for(char j='a'; j<='z'; ++j) {

                for(char i='a'; i<='z'; ++i) {
                    ++sum;
                    if(sum-1==max(c,a))
                        return 0;
                    cout<<y<<t<<j<<i<<' ';
                }
            }
        }
    }
    for(char s='a'; s<='z'; ++s) {

        for(char y='a'; y<='z'; ++y) {

            for(char t='a'; t<='z'; ++t) {

                for(char j='a'; j<='z'; ++j) {

                    for(char i='a'; i<='z'; ++i) {
                        ++sum;
                        if(sum-1==max(c,a))
                            return 0;
                        cout<<s<<y<<t<<j<<i<<' ';
                    }
                }
            }
        }
    }
    return 0;
}