题解:P1061 [NOIP2006 普及组] Jam 的计数法
本题算法:模拟,枚举。
正解思路如下:
- 首先,题目要我们求给我们的 Jam 数字的后五个数字,所以我们可以循环来枚举这五个数字,
i 的范围是零到五。 - 题目中说:“英文字母按原先的顺序,排在前面的字母小于排在它后面的字母。”所以我们的数字也必须是从小到大排好序的。因此我们可以枚举上一个数字,将上一个数字的每一位加一,这样我们的数字一定是递增的,不会出现别的情况。
#include<bits/stdc++.h>
using namespace std;
string jam;
int main()
{
int s,t,w;
cin>>s>>t>>w;
cin>>jam;
for(int i=1;i<=5;i++)
{
for(int j=w-1;j>0;j--)
{
if(jam[j]-96<=j-w+t)
{
jam[j]++;
for(int k=j+1;k<w;k++)
{
jam[k]=jam[k-1]+1;
}
cout<<jam<<"\n";
break;
}
}
}
return 0;
}