题目介绍:
其实这个题猛的一读起来是没有什么头绪的,什么是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分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#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