您当前的位置: 首页 >  蓝桥杯

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

蓝桥杯算法训练VIP-JAM计数法

不牌不改 发布时间:2021-08-10 22:13:30 ,浏览量:0

题目

题目链接

题解

这道题有点类似于“加法”,给你一个数x,输出x+1x+2x+3x+4x+5

(为了下述方便,我们直接将字母表示为数字,1a以此类推) 同样也存在进位,因为要求每个位置上的数最大不能超过t,而且还要求必须递增,这就导致每一个位置都对应一个允许的最大数,第i位能放的最大数为t+i-w+1i = 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             
关注
打赏
1662186765
查看更多评论
0.0398s