题目介绍:
其实这个题猛的一读起来是没有什么头绪的,什么是Jam的计数法?前提是知道什么是Jam数,Jam数其实就是几个字符组成的一个字符串,但是这个字符串中的字符遵循严格的递增顺序,这个题的意思就是我们输入一个字符串,我们之后找他后面的五个满足条件的Jam数字,打个比方就是我们输入的三个数是2 10 5,这三个数的含义是26个字母中的字母标号为2-10的字母,而5代表的是我们接下来要输入的Jam数字的长度,
题介绍的差不多了,下面介绍思路。
解题思路:
既然我们需要用到26个字母,那么我们可以首先把26个字母给放在一个长度为27的数组ch1中,素组第0个不放字符,之后我们可以通过我们输入的2和10来求出满足条件的字符然后存在另一个数组ch2中,然后我们将输入的Jam字符串str1给转化为字符数组ch3,我们可以用indexof()来遍历ch3与字符串str1来求出ch3中的每一个字符在str1中的位置,然后我们可以利用一个while循环来使底下的for循环循环5次,定义一个flag=0,如果满足条件的话,就输出一个Jam数字,flag++,但是ch3每一次是要改变着的,大致思路就是这样的。
注意事项:
比较复杂,敲代码的时候注意一点,一定要理清思路。
参考代码:package itcast3;
import java.util.Scanner;
public class L1104 {
public static void main(String[] args) {
Scanner m=new Scanner(System.in);
char ch1[]=new char[27];
char c='a';
for(int i=1;i
{
ch1[i]=c;
c=(char) (c+1);
}
int number1,number2,number3;
String str1;
number1=m.nextInt();
number2=m.nextInt();
number3=m.nextInt();
str1=m.next();
int length=number2-number1+1;
char ch2[]=new char[length];
int j=0;
for(int i=number1;i<=number2;i++)
{
ch2[j]=ch1[i];
j++;
}
String str2=new String(ch2);
char ch3[]=new char[str1.length()];
ch3=str1.toCharArray();
int flag=0;
while(flag!=5)
{
for(int i=str1.length()-1;i>=0;i--)
{
String str3="";
int number=str2.indexOf(ch3[i]);
if(number
{
if(i==ch3.length-1)
{
for(int s=0;s
{
System.out.print(ch3[s]);
str3+=ch3[s];
}
System.out.print(ch2[number+1]);
str3+=ch2[number+1];
System.out.println();
flag++;
ch3=str3.toCharArray();
break;
}
else if(ch3[i+1]!=ch2[number+1])
{
for(int s=0;s
{
System.out.print(ch3[s]);
str3+=ch3[s];
}
for(int h=number+1;h
{
System.out.print(ch2[h]);
str3+=ch2[h];
}
System.out.println();
flag++;
ch3=str3.toCharArray();
break;
}
}
}
}
}
}