题解:P1061 [NOIP2006 普及组] Jam 的计数法
题解:P1061 [NOIP2006 普及组] Jam 的计数法
前言
本蒟蒻的第一篇题解,求过。
思路
一道简单的模拟题。
每次
- 如果这一位无需进位,则让这一位
+1 ,并且让后面的每一位都变为它左边的一位+1 ,输出结果; - 若每一位都需要进位,则说明已经是最后一个 Jam 数字,立刻停止程序。
代码
#include <bits/stdc++.h>
using namespace std;
int s, t, w;
string jam;
int main()
{
cin >> s >> t >> w >> jam;
for (int i = 1; i <= 5; i++) // 最多加 5 次 1
{
bool flag = true; // 记录能不能加 1
for (int j = w - 1; j; j--) // 从右往左扫描
{
if (jam[j] - 'a' + 1 <= j - w + t) // 如果这一位无需进位
{ // 注意在 Jam 数字中第 j 位只能达到 j - w + t
jam[j]++;
for (int k = j + 1; k < w; k++)
{
jam[k] = jam[k - 1] + 1;
}
cout << jam << endl;
flag = false; // 能加 1
break;
}
}
if (flag) // 不能加 1
{
break;
}
}
return 0;
}