洛谷 P7227 【[COCI2015-2016#3] ESEJ】

按照惯例这里需要一个传送门

挨个分析题意

  1. 这篇文章至少 a a a 个词,最多 b b b 个词。

    ——限定了范围,直接 b b b比较方便。

  2. 每个单词至少 1 1 1 个字母,最多 15 15 15 个字母。

    ——显然一个正常的人都不会用 15 15 15个字母的。

  3. 文章至少包含 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;//撒花
 } 

AC 80分

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值