题目
题目链接
题解这道题有点类似于“加法”,给你一个数x
,输出x+1
,x+2
,x+3
,x+4
,x+5
。
(为了下述方便,我们直接将字母表示为数字,1
为a
以此类推) 同样也存在进位,因为要求每个位置上的数最大不能超过t
,而且还要求必须递增,这就导致每一个位置都对应一个允许的最大数,第i
位能放的最大数为t+i-w+1
,i = 1~w-1
。(自己举几个i
就知道了)
为了方便,我们暂设第i
位能放的最大数为mx[i]
。 对最高索引位的数+1,当最高索引位的数大于其对应的mx时,就说明要发生进位,那么次高索引位的数就要+1,再将此数与此位对应的mx进行比较,依次向低索引位推进,直至不发生进位或者到头了。若到头了,说明已经不存在一个满足要求且比当前这个数大的数了;若未到头,中途存在某位得到后面的进位后仍不进位,则让停到的这一个位置上的数+1,其后面的每一位数都赋值为其前一位数的值+1,即第i
位的数赋值为第i-1
位的数+1,而停到的这一位前面是的数不变,输出即可。
我们按照上面的方式输出五次,或者到头了直接break。
代码#include
using namespace std;
int s, t, w;
char str[100];
int main()
{
cin>>s>>t>>w>>str;
for(int c = 1;c = 0;i --) {
if(str[i]-96+cc > t+i-w+1) cc = 1; // t+i-w+1表示第i位能放的最大字母是多少,要是当前这个字母加上进位大于了本位能放的最大字母,就要发生进位
else cc = 0;
if(cc==0) break; // 进位为0,说明第i位不用再向前进位了
}
if(i!=-1) {
str[i] = str[i]+1; // 第i个数+1
for(int j = i+1;j
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?