不幸运车票 Time Limit:1000MS Memory Limit:16384KTotal Submit:78 Accepted:8 Description 莫斯科住着些奇怪的人。 每次乘公车,买一张带有6位数的票,他们把前3位数字和后3位数字加在一起。 如果这两个和相等,他们认为这张票是幸运票。 一个拥有幸运票的人,梦想什么事,吃掉这张票(不,它不是用巧克力做的,是纸),梦想就会成真...至少他们相信如此。 圣彼得堡也有一些奇怪的人。 每次乘公车,买一张带有6位数字的票,他们试图把奇数位的3个数字和偶数位的3个数字加起来。 如果这两个和相等,他们认为这张票是幸运票。 一个拥有幸运票的人,梦想什么事,吃掉这张票(圣彼得堡的车票也不是用巧克力做的,是纸),梦想就会成真...至少他们相信如此。 在“第3首都”— 叶卡特琳堡 — 我们嘲笑这些奇怪的想法。 我们很实际,我们不迷信,一点也不。 但我们懂得太多的幸运不是好事。 因此,如果一张票在“莫斯科意义”下和“圣彼得堡意义”下都是幸运票,我们认为它是不幸运票。 如果我们乘车买到一张不幸运车票,我们会扔掉它,立即下车。 不幸运票的两个例子是 472175 和 810513。 你要写一个程序,计算全部N-位不幸运票的数目。 Input 输入包含一个正偶数 N (2 ≤ N ≤ 20) — 车票号码的数位。 注意,00742544 是有效的8位车票 (它是一张圣彼得堡幸运票)。 Output 你的程序应该输出一个整数,N位不幸运车票的总数。 Sample Input 4 Sample Output 100 Source 代码写的很变态!其实想法很简单。难得优化了。import java.math.BigInteger; import java.util.Scanner; public class Main { private static int n; private static BigInteger f(int x){ int i,i1,i2,i3,i4,i5; BigInteger total=new BigInteger("0"); int number=0; if(x==0) return BigInteger.ONE; else if(x==1) return new BigInteger("10"); else if(x==2){ for(i=0;i<=18;i++){ number=0; for(i1=0;i1<=9;i1++){ if(i1>i) break; for(i2=0;i2<=9;i2++){ if(i1+i2==i) number++; if(i1+i2>i) break; } } total=total.add(new BigInteger(String.valueOf(number*number))); } return total; } else if(x==3){ for(i=0;i<=27;i++){ number=0; for(i1=0;i1<=9;i1++){ for(i2=0;i2<=9;i2++) for(i3=0;i3<=9;i3++){ if(i1+i2+i3==i) number++; } } total=total.add(new BigInteger(String.valueOf(number*number))); } return total; } else if(x==4){ for(i=0;i<=36;i++){ number=0; for(i1=0;i1<=9;i1++){ for(i2=0;i2<=9;i2++) for(i3=0;i3<=9;i3++) for(i4=0;i4<=9;i4++){ if(i1+i2+i3+i4==i) number++; } } total=total.add(new BigInteger(String.valueOf(number*number))); } return total; } else if(x==5){ for(i=0;i<=45;i++){ number=0; for(i1=0;i1<=9;i1++){ for(i2=0;i2<=9;i2++) for(i3=0;i3<=9;i3++) for(i4=0;i4<=9;i4++) for(i5=0;i5<=9;i5++) { if(i1+i2+i3+i4+i5==i) number++; } } total=total.add(new BigInteger(String.valueOf(number*number))); } return total; } return total; } public static void main(String args[]){ Scanner cin= new Scanner(System.in); n = cin.nextInt(); if(n%4==0) System.out.println(f(n/4).multiply(f(n/4))); else System.out.println(f((n+2)/4).multiply(f((n-2)/4))); } }

评论