1860 - 小珂的数学题

通过次数

0

提交次数

0

时间限制 : 3 秒 内存限制 : 128 MB

今天小珂在书上看到了一种数值表示方式,请你写一个程序帮助她迅速转化一下。题目信息如下:

已知一种对应关系,从a开始按照字典序增加,字符串最长为5,遇到相同的或者后面的字符不比前面的大的字符串就不计数。

    a->1

    b->2

     ……

     ……         

    z->26

    ab->27

    ac->28

     ……

     ……

    vwxyz->83681

     ……

题目输入

会输入少于200行的数据,每一行有一个字符串。如果出现不符合规则的字符串(各个字符不是单调递增)的,输出0,否则输出它对应的数。(例如are 不合规则,对应输出0)

题目输出

输出每个结果,换行结束。

输入/输出样例

输入格式

a
z
cat
vwxyz

输出格式

1
26
0
83681

Java解答

import java.util.Scanner;
public class Main
{
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
			String str=sc.next();
			char ch[]=str.toCharArray();
			switch(ch.length)
			{
			case 1:
				getNumbers1(ch[0]);
				break;
			case 2:
				if(ch[0]<ch[1])
					getNumbers2(ch[0],ch[1]);
				else
					System.out.println(0);
				break;
			case 3:
				if(ch[0]<ch[1]&&ch[1]<ch[2])
					getNumbers3(ch[0],ch[1],ch[2]);
				else
					System.out.println(0);
				break;
			case 4:
				if(ch[0]<ch[1]&&ch[1]<ch[2]&&ch[2]<ch[3])
					getNumbers4(ch[0],ch[1],ch[2],ch[3]);
				else
					System.out.println(0);
				break;
			case 5:
				if(ch[0]<ch[1]&&ch[1]<ch[2]&&ch[2]<ch[3]&&ch[3]<ch[4])
					getNumbers5(ch[0],ch[1],ch[2],ch[3],ch[4]);
				else
					System.out.println(0);
				break;
			}
		}
	}
	public static void getNumbers1(char x)
	{
		int sum=0;
		for(char a='a';a<=x;a++)
			sum++;
		System.out.println(sum);
	}
	public static void getNumbers2(char x,char y)
	{
		int sum=26;
		for(char a='a';a<=x-1;a++)
			for(char b=(char)(a+1);b<='z';b++)
				sum++;
		for(char b=(char)(x+1);b<=y;b++)
			sum++;
		System.out.println(sum);
	}
	public static void getNumbers3(char x,char y,char z)
	{
		int sum=351;
		for(char a='a';a<=x-1;a++)
			for(char b=(char)(a+1);b<='y';b++)
				for(char c=(char)(b+1);c<='z';c++)
					sum++;
		for(char b=(char)(x+1);b<=y-1;b++)
			for(char c=(char)(b+1);c<='z';c++)
				sum++;
		for(char c=(char)(y+1);c<=z;c++)
			sum++;
		System.out.println(sum);
	}
	public static void getNumbers4(char x,char y,char z,char m)
	{
		int sum=2951;
		for(char a='a';a<=x-1;a++)
			for(char b=(char)(a+1);b<='x';b++)
				for(char c=(char)(b+1);c<='y';c++)
					for(char d=(char)(c+1);d<='z';d++)
						sum++;
		for(char b=(char)(x+1);b<=y-1;b++)
			for(char c=(char)(b+1);c<='y';c++)
				for(char d=(char)(c+1);d<='z';d++)
					sum++;
		for(char c=(char)(y+1);c<=z-1;c++)
			for(char d=(char)(c+1);d<='z';d++)
				sum++;
		for(char d=(char)(z+1);d<=m;d++)
			sum++;
		System.out.println(sum);
	}
	public static void getNumbers5(char x,char y,char z,char m,char n)
	{
		int sum=17901;
		for(char a='a';a<=x-1;a++)
			for(char b=(char)(a+1);b<='w';b++)
				for(char c=(char)(b+1);c<='x';c++)
					for(char d=(char)(c+1);d<='y';d++)
						for(char e=(char)(d+1);e<='z';e++)
							sum++;
		for(char b=(char)(x+1);b<=y-1;b++)
			for(char c=(char)(b+1);c<='x';c++)
				for(char d=(char)(c+1);d<='y';d++)
					for(char e=(char)(d+1);e<='z';e++)
						sum++;
		for(char c=(char)(y+1);c<=z-1;c++)
			for(char d=(char)(c+1);d<='y';d++)
				for(char e=(char)(d+1);e<='z';e++)
					sum++;
		for(char d=(char)(z+1);d<=m-1;d++)
			for(char e=(char)(d+1);e<='z';e++)
				sum++;
		for(char e=(char)(m+1);e<=n;e++)
			sum++;
		System.out.println(sum);
	}
}