一生一世陪你


私信TA

用户名:wodeshijie

访问量:23440

签 名:

我要好好地写代码..........

等  级
排  名 428
经  验 4927
参赛次数 1
文章发表 19
年  龄 10
在职情况 学生
学  校 河南农业大学
专  业

  自我简介:

我就是我,可能不是太好,但是我就是我,谁也不能取代........

题目介绍:
            其实这个题猛的一读起来是没有什么头绪的,什么是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;
}
2020-02-10 15:09:43
#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
2020-02-10 15:08:18
  • «
  • 1
  • »