题目介绍:
其实这个题猛的一读起来是没有什么头绪的,什么是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.length;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<str2.length()-1) { if(i==ch3.length-1) { for(int s=0;s<i;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<i;s++) { System.out.print(ch3[s]); str3+=ch3[s]; } for(int h=number+1;h<number+1+ch3.length-i;h++) { System.out.print(ch2[h]); str3+=ch2[h]; } System.out.println(); flag++; ch3=str3.toCharArray(); break; } } } } } }
0.0分
5 人评分
#include <stdio.h> char num[27]={'0','a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t', 'u','v','w','x','y','z'}; int main() { int s,t,w; //s最小的字母的序号,t最大的字母的序号,w为数字的位数 scanf("%d%d%d",&s,&t,&w); char str[w]; char Max=num[t]; getchar(); gets(str); int pow=w-1; //k表示权位 for(int i=0;i<5;i++){ if(str[pow]==Max){ pow--; while(str[pow]+1==str[pow+1]){ pow--; } str[pow]++; for(int i=pow+1;i<str[i]!=0;i++) str[i]=str[i-1]+1; puts(str); pow=w-1; } else{ str[pow]++; puts(str); pow=w-1; } } return 0; }
#include <stdio.h> char num[27]={'0','a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t', 'u','v','w','x','y','z'}; int main() { int s,t,w; //s最小的字母的序号,t最大的字母的序号,w为数字的位数 scanf("%d%d%d",&s,&t,&w); char str[w]; char Max=num[t]; char Min=num[s]; getchar(); gets(str); int pow=w-1; //k表示权位 for(int i=0;i<5;i++) { if(str[pow]==Max) { pow--; while(str[pow]+1==str[pow+1]){ pow--; } str[pow]++; for(int i=pow+1;i<str[i]!=0;i++) str[i]=str[i-1]+1; puts(str); pow=w-1; } else{ str[pow]++; puts(str); pow=w-1