按照惯例这里需要一个传送门
挨个分析题意:
-
这篇文章至少 a a a 个词,最多 b b b 个词。
——限定了范围,直接造 b b b个比较方便。
-
每个单词至少 1 1 1 个字母,最多 15 15 15 个字母。
——显然一个正常的人都不会用 15 15 15个字母的。
-
文章至少包含 b 2 \dfrac{b}{2} 2b 个不同的单词。
——还是全部都不同来的容易。
分(hu)析(che)完毕。
众所周知,从 1 1 1到 b b b的自然数是绝对不会有重复的。
那为什么不用数来代替字母呢?
将 0 0 0 到 9 9 9 的数与 a a a 到 j j j 的字母一一对应:
0 0 0 | 1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | 5 5 5 | 6 6 6 | 7 7 7 | 8 8 8 | 9 9 9 |
---|---|---|---|---|---|---|---|---|---|
a a a | b b b | c c c | d d d | e e e | f f f | g g g | h h h | i i i | j j j |
然后从
1
1
1 枚举到
b
b
b,把每一位转化为对应的字母,就能产生不重复的 单词 字符串了。
C o d e Code Code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a,b;
string s="abcdefghij";//与数字对应
void f(int n)//数字转化成字母
{
int r;
while(n!=0)
{
r=n%10;
n/=10;//这样是倒着的
cout<<s[r];//但是没关系
}
cout<<' ';
return;//好习惯
}
int main()
{
cin>>a>>b;
for(int i=1;i<=b;i++)//枚举
f(i);//处理
return 0;//撒花
}