因为毕业也没有兴致整这些东西,就没有参加了,突然想起这几天比赛结束了,就找题做做,绝没有看答案,代码仅测试,很多可以优化的地方,练练思路:)

A.九进制2022->十进制

2022
2*9^3+0*9^2+2*9^1+2*9^0
=1,478

按八进制按权的方法展开


B.顺子日期
月日4位其中3个是顺子

012x x=0-9种 10种 
x012 x=1,1种
123x x=0,1种
x123 x=0 1,2种
234x 排除
x234 排除
345x 排除
x345 排除
456x 排除
x456 排除
567x 排除
x567 排除
678x 排除
x678 排除
789x 排除
x789 排除

14种


C.刷题统计
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做α道题目,周六和周日每天做b道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于n题?
【输入格式】
输入一行包含三个整数a, b 和n.
【输出格式】
输出一个整数代表天数。

个人想法:
情况1.一周内完成
利用循环
情况2.超过一周
先剪掉多余的周的数据,再利用情况一处理

    int a=2,b=3,n=22;
int sumDay=0;
if(n>=5*a+2*b){
    sumDay=n/(5*a+2*b)*7;
    n%=(5*a+2*b);
}

for (int i = 1; i < 8; i++) {
    if(n<=0)break;
    
    if(i>=6)
        n-=a;
    else
        n-=b;
    
    sumDay+=1;
}
System.out.println(sumDay);

测试代码,比赛应该用Long,或许有BUG,思想方向应该是对的,可以得几分:)


D.修剪灌木
爱丽丝要完成一项修剪灌木的工作。
有N棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为0厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晚会长高1厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是О厘米。爱丽丝想知道每棵灌木最高长到多高。

解决思路:经过手动测试2 3棵,会形成循环,取最大值作为循环结束条件(毕竟每一轮都在+1和=0所以肯定有一个最大值),循环内,来回+1,置0,取最大值存储

long  time = System.currentTimeMillis(); 
        int n=7;
        int[] sum=new int[n];
        int[] max=new int[n];
 
        int start=0;
        int type=1;
        if(n==1)
        {
            System.out.println(1);
            return;
        }
        
        while(max[0]==0 || max[0]!=sum[0]){
        
            if(start<0){
                type=1;
                start=0;
            }
            if(start==n){
                type=-1;
                start=n-1;
            }

            for (int j = 0; j < n; j++) {
                if(max[j]<sum[j])max[j]=sum[j];    
                sum[j]+=1;
            }
            
            sum[start]=0;
            for (int i : sum) {
                System.out.print(i+" ");
            }
            System.out.println();
            start+=type;
        }
        System.out.println("*********");
        for (int i : max) {
            System.out.print(i+" ");
        }
        System.out.println("\n*********");
        System.out.println(System.currentTimeMillis()-time+"ms");

经过运行,10000棵也能1s内完成,当测试会发现

n=1到7得出以下结果
1
22
4 2 4 
6 4 4 6 
8 6 4 6 8 
10 8 6 6 8 10 
12 10 8 6 8 10 12 

可以用一个小的循环,很简单的计算出来,就不敲这个方法的了,这题满分应该不是问题:)


E: X 进制减法
进制规定了数字在数位上逢几进一。
X进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种X进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则X进制数321转换为十进制数为65。
现在有两个X进制表示的整数A和B,但是其具体每一数位的进制还不确定,只知道A和B是同一进制规则,且每一数位最高为N进制,最低为二进制。请你算出A一B的结果最小可能是多少。
请注意,你需要保证A 和B在X进制下都是合法的,即每一数位上的数字要小于其进制。

Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int K = scanner.nextInt();
        
        int[][] Map =new int[N][M];
        
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                Map[i][j] = scanner.nextInt();
            }
        }
        
        
        
        int Num=0;
        
        /************************/
        
        
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                
        
                for (int r = i; r < N; r++) {                    
                    for (int c = j; c < M; c++) {
        
                        
                        int Sum=0;
                        out:for (int startr = i; startr <= r; startr++) {
                            for (int startc = j; startc <= c; startc++) {
                                Sum+=Map[startr][startc] ;
                                if(Sum>K){
                                  break out;
                                }
                            }
                        }
                        
                    
                        if(Sum<=K){
                            Num++;
                        }
                        
                        
                        
   
                    }
                }
                
                
                
            
            }        
        }
        
        
        
        System.out.println(Num);

直接爆破遍历,应该有些样本会超时,应该可以得一半的分:)


剩下的题只会爆破了,可能会得10来分吧

╮(╯▽╰)╭

做到这个程度,不知道省二有木有

标签: none

© 2025 GarinJのBlog. 由 Typecho&Garin 强力驱动.