1860 - 小珂的数学题
时间限制 : 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); } }