手撕代码(01)

总结【2019.08.05】:

问题1中因为超过80k的部分指针指向错误,导致没有通过所有的用例

问题2中以ABCD结尾的没有做出判断,导致没有通过所有用例

问题3中大致思路没有问题,但是由于上面两个问题检测错误的耗时,导致时间不够【总共给150分钟】

写编程题太慢,每次都还要自己造轮子这个太慢了

改进:

自己写题目的太慢了,这个是当前的现状,最近一定要好好练习。

多练习一些套路,并且准备一些自己做编程题目的模板【自己提前把汽车框架先组装一个半成品】,下次再写编程题时,直接使用这个半成品模板,节省时间。

Answer1

输入样例1

5

5000

15000

50000

8025

10001

输出样例1

0

790

9090

93

290

 1 package com.cnblogs.mufasa.research2020;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.util.Scanner;
 7 
 8 class Tax{  //检查出错误所在地
 9     private static final int[] taxIndex={3000,9000,13000,10000,20000,25000};//6个缴税分界点
10     private static final double[] taxRate={0.03,0.1,0.2,0.25,0.3,0.35,0.45};//7个税率分界点
11     private Scanner sc=new Scanner(System.in);
12     private BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13 
14     public Tax() throws IOException {
15 //        int num=sc.nextInt();
16         int num=Integer.valueOf(br.readLine());
17         int[] inData=new int[num];
18         for(int i=0;i<num;i++){//①数据输入
19 //            inData[i]=Integer.valueOf(sc.next());
20             inData[i]=Integer.valueOf(br.readLine());
21         }
22 
23         for(int i=0;i<num;i++){//②数据输出
24             System.out.println(DataDeal(inData[i]));
25         }
26     }
27 
28     /**
29      * 单个个人所得税计算
30      * @param income 个人收入
31      * @return taxCash四舍五入整数结果
32      */
33     private long DataDeal(int income){
34         double taxCash=0;
35         if(income<=5000){//无需缴税
36             return 0;
37         }else {//需要缴税
38             income=income-5000;
39             for(int i=0;i<taxIndex.length;i++){
40                 if(income/taxIndex[i]>0){//可以进一步计算税费
41                     taxCash+=taxIndex[i]*taxRate[i];
42                     income=income-taxIndex[i];
43                 }else {//没有超出80k的缴税单元
44                     taxCash+=1.0*income*taxRate[i];
45                     income=0;
46                     break;
47                 }
48             }
49             if(income>0){//超过80k的部分
50                 System.out.println(income);
51                 taxCash+=income*taxRate[taxRate.length-1];//todo 错误定位!!!已改正
52             }
53         }
54         return Math.round(taxCash);
55     }
56 }
57 
58 
59 public class Answer1 {
60     public static void main(String[] args) throws IOException {
61         new Tax();
62     }
63 }
64 /*
65 1
66 1000000
67 
68 48290
69 
70 5
71 5000
72 15000
73 50000
74 8025
75 10001
76 
77 0
78 790
79 9090
80 93
81 290
82 
83 5
84 0
85 1000000
86 5000
87 
88 1
89 85000
90 20840
91 
92 1
93 60000
94 12090
95  */
View Code

 Answer2

 

 1 package com.cnblogs.mufasa.research2020;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Scanner;
 5 
 6 class StringDone{
 7     private Scanner sc=new Scanner(System.in);
 8     public StringDone(){
 9         int T=sc.nextInt();
10         String[] inData=new String[T];
11 
12         for (int i=0;i<T;i++){//数据输入
13             inData[i]=sc.next();
14         }
15 
16         for (int i=0;i<T;i++){//数据输出
17             System.out.println(DataDeal(inData[i]));
18         }
19     }
20 
21     /**
22      *
23      * @param str
24      * @return
25      */
26     private String DataDeal(String str){
27         if(str.length()<4){
28             return str;
29         }
30 
31         String strOut="";
32         ArrayList<Integer> strLine=new ArrayList<>();
33         int charIndex;
34         int num=0;
35         char end;
36         char[] strArray=str.toCharArray();
37 
38         for(int i=0;i<strArray.length;i++){
39             if(i==0){//第一次迭代
40                 num=1;
41                 strLine.add(Integer.valueOf(strArray[i]));
42                 strOut+=strArray[i];
43 
44             }else {//后续迭代
45                 charIndex=Integer.valueOf(strArray[i]);
46                 if(charIndex==strLine.get(strLine.size()-1)+1){//递增字符
47                     strLine.add(charIndex);
48                     num+=1;
49                     strOut+=strArray[i];
50                     if(i==strArray.length-1 && num>=4){//已经到尾部&有4个以上递增字符
51                         end=strArray[i];//当前字符
52                         strOut=strOut.substring(0,strOut.length()-num+1);
53                         strOut=strOut+"-"+end;
54                     }
55                 }else {//非递增字符
56                     if(num>=4){//符合要求处理,不符合要求直接无视
57                         end=strArray[i-1];//前一个数据
58                         strOut=strOut.substring(0,strOut.length()-num+1);
59                         strOut=strOut+"-"+end+strArray[i];
60                     }else {
61                         strOut+=strArray[i];
62                     }
63                     strLine.clear();//清楚数据
64                     strLine.add(charIndex);
65                     num=1;
66                 }
67             }
68         }
69         return strOut;
70     }
71 }
72 
73 public class Answer2 {
74     public static void main(String[] args) {
75         new StringDone();
76     }
77 }
78 /*
79 1
80 ZABCDEFGXAS
81 
82 ZA-GXAS
83 
84 输入样例1:
85 3
86 DCBA
87 ZABCDEFGX
88 XYZABCDMMMGHIJKLRST
89 
90 输出样例1:
91 DCBA
92 ZA-GX
93 XYZA-DMMMG-LRST
94 
95  */
View Code

Answer3

 

输入样例:

3

5 2 113221101000101

13 7 1016

4 12 2222248A

输出样例:

837

13

682

  1 package com.cnblogs.mufasa.research2020;
  2 
  3 import java.io.IOException;
  4 import java.util.Scanner;
  5 
  6 class NumberLine<T extends Comparable<T>> {
  7     private Scanner sc=new Scanner(System.in);//输入更加方便
  8 
  9     public NumberLine(){
 10         int T=sc.nextInt();
 11         int[][] xy=new int[T][2];
 12         String[] strInput=new String[T];
 13 
 14         for(int i=0;i<T;i++){//数据输入
 15             xy[i][0]=sc.nextInt();
 16             xy[i][1]=sc.nextInt();
 17             strInput[i]=sc.next();//自动去除空格
 18         }
 19 
 20         for(int i=0;i<T;i++){//数据输出
 21 //            System.out.println(i+":"+xy[i][0]+" :"+ xy[i][1]);
 22 //            System.out.println(strInput[i]);
 23             System.out.println(DataDeal(xy[i][0],xy[i][1],strInput[i]));
 24         }
 25     }
 26 
 27     //数据处理
 28     private String DataDeal(int x,int y,String str){
 29         String num="";
 30         String str1,str2;
 31         boolean flag=(x<y);//从大的位置开始进行
 32         int start=0;
 33         for(int i=0;i<str.length();i++){//这里的判断后为后续减少很大的计算量
 34             if(flag){//x最小
 35                 if(charToInt(str.charAt(i))>=x){
 36                     start=str.length()-i;
 37                     break;
 38                 }
 39             }else {//y最小
 40                 if(charToInt(str.charAt(str.length()-i-1))>=y){
 41                     start=str.length()-i;
 42                     break;
 43                 }
 44             }
 45         }
 46 //        System.out.println("start:"+start);
 47 
 48         for(int i=start;i<str.length();i++){
 49             if(flag) {
 50                 str1 = str.substring(0, str.length() -i);
 51                 str2 = str.substring(str.length() -i);
 52             }else {
 53                 str1 = str.substring(0, i);
 54                 str2 = str.substring(i);
 55             }
 56             num=numToHex(x,str1);
 57 //            System.out.println("str1="+str1+",str2="+str2);
 58 //            System.out.println("num1="+num+",num2="+numToHex(y,str2));
 59             if(num.equals(numToHex(y,str2))){
 60                 return num;
 61             }
 62         }
 63         return num;
 64     }
 65 
 66     //X进制转10进制  【正确】
 67     public static String numToHex(int x,String str){
 68         String hexStr="";
 69         long hex=0;//十进制数据
 70         char[] strArray=reverse(str).toCharArray();
 71         for(int i=0;i<strArray.length;i++){
 72             hex+=charToInt(strArray[i])*Math.pow(x,i);
 73         }
 74         return hex+"";
 75     }
 76 
 77     //10进制转x进制  【正确】
 78     public static String HexToNum(int x,String str){
 79         String numStr="";
 80         int hex=Integer.valueOf(str);//十进制数据
 81         int shang;
 82         int yu;
 83         while (hex>=0){
 84             shang=hex/x;
 85             yu=hex%x;
 86             numStr+=intToChar(yu);//todo 需要注意数据转换
 87             if(shang==0){
 88                 break;
 89             }else {
 90                 hex=shang;
 91             }
 92         }
 93         return reverse(numStr);
 94     }
 95 
 96     // 字符串反转【正确】
 97     public static String reverse(String str) {
 98         return new StringBuilder(str).reverse().toString();
 99     }
100 
101     //字符转int数据【正确】
102     public static int charToInt(char sin){
103         int num=Integer.valueOf(sin);
104         if(num>=65){
105             num-=55;
106         }else if(num<=57){
107             num-=48;
108         }
109         return num;
110     }
111 
112     //int转字符【正确】
113     public static char intToChar(int num){
114         if(num<=9){
115             return (char)(num+48);
116         }else {
117             return (char)(num+55);
118         }
119     }
120 }
121 
122 public class Answer3 {
123     public static void main(String[] args){
124         new NumberLine();
125 //        System.out.println(NumberLine.reverse("123456"));
126 //        System.out.println(NumberLine.numToHex(8,"12"));
127 //        System.out.println(NumberLine.intToChar(9));
128 //        System.out.println(NumberLine.intToChar(0));
129 //        System.out.println(NumberLine.HexToNum(16,"31"));
130 
131     }
132 }
133 /*
134 4
135 5 2 113221101000101
136 13 7 1016
137 4 12 2222248A
138 12 4 48A22222
139 
140 837
141 13
142 682
143 682
144  */
View Code

猜你喜欢

转载自www.cnblogs.com/Mufasa/p/11300706.html
今日推荐