蓝桥杯专题-真题版含答案-【三角螺旋阵】【干支记年法】【异或加密法】【金字塔】

发布时间:2023年12月17日
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总
游戏脚本-辅助自动化Android控件全解手册再战Android系列
Scratch编程案例软考全系列Unity3D学习专栏
蓝桥系列ChatGPT和AIGC

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单

CSDN-芝麻粒儿

👉实践过程

😜三角螺旋阵

方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,从标准输入获得整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。

import java.util.Scanner;  
  
public class 三角螺旋阵 {  
    // 输出   
    public static void print(int[][] m){  
        for(int[] x:m){  
            for(int y:x){  
                System.out.printf("%4d",y);  
            }  
            System.out.println();  
        }  
    }  
    // 初始化   
    public static void init(int[][] m){  
        for(int i=0;i<m.length;i++){  
            m[i] = new int[m.length-i];  
        }  
    }  
    // 螺旋填充数字   
    public static void f(int[][] m,int k,int num){  
        if(k>=m.length/2) return ;  
        // 第一行   
        for(int i=k;i<m[k].length-k;i++){  
            m[k][i] = num++;   
        }  
        // 最后一位   
        for(int i=k+1;i<m[k].length-k;i++){  
            m[i][m[i].length-1-k] = num++;   
        }  
        // 左列   
        for(int i=m[k].length-2-k;i>k;i--){  
            m[i][k] = num++;   
        }  
        f(m,k+1,num);   // 递归进行内圈填充   
    }  
    public static void main(String[] args){  
        Scanner scan = new Scanner(System.in);  
        System.out.println("输入整数n(3~20)");  
        int n = scan.nextInt();  
        int[][] m = new int[n][];  
        init(m);    // 初始化   
        f(m,0,1);   // 螺旋填充数字   
        print(m);   // 输出   
    }  
} 

😜干支记年法

在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。
10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸
12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥
如果某年是甲子,下一年就是乙丑,再下是丙寅,…癸酉,甲戌,乙亥,丙子,…
总之天干、地支都是循环使用,两两配对。
今年(2012)是壬辰年,1911年辛亥革命
下面的代码根据公历年份输出相应的干支法纪年。已知最近的甲子年是1984年。
请分析代码逻辑,并推测划线处的代码。

public class 干支记年法 {  
    public static void f(int year){  
        char[] x = {'甲','乙','丙','丁','戊','己','庚','辛','壬','癸'};  
        char[] y = {'子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'};  
        int n = year - 1984;  
        while(n<0) {  
            n += 60;  
        }  
        System.out.printf("%d %s%s\n", year,x[n%10], y[n%12]);  
    }  
    public static void main(String[] args){  
        f(1911);  
        f(1970);  
        f(2012);  
    }  
}  
运行结果:
1911 辛亥  
1970 庚戌  
2012 壬辰

😜异或加密法

在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。

public class 异或加密法 {  
    public static void print(char[] p){  
        for(char x:p){  
            System.out.printf("%s", x);  
        }  
        System.out.println();  
    }  
    public static void f(char[] buf, char[] uckey, int n) {  
        int i;  
        for (i = 0; i < n; i++)  
            buf[i] = (char) (buf[i] ^ uckey[i]);  
    }  
  
    public static void main(String[] args) {  
        char p[] = "abcd中国人123".toCharArray(); // 待加密串   
        char[] key = "11001100010001110".toCharArray(); // 以串的形式表达的密匙,运算时要转换为按位存储的形式。   
        int np = p.length;  
        int nk = key.length;  
        char[] uckey = new char[np];  
  
        // 密匙串需要按位的形式循环拼入 uckey中   
        int i;  
        for (i = 0; i < np * 8; i++) {  
            if (key[i % nk] == '1')  
                uckey[i/8] |= (char)0x80 >> (i%8); // 填空1   
            else  
                uckey[i/8] &= ~(char)0x80 >> (i%8); // 填空2   
        }  
        f(p, uckey, p.length);  
        print(p);  
        f(p, uckey, p.length);  
        print(p);  
    }  
}

😜金字塔

下面代码的目标是输出一个大写字母组成的金字塔。
其中space表示金字塔底距离左边的空白长度,x表示金字塔底的中心字母。
比如:space=0, x=’C’,则输出:
A
ABA
ABCBA
再如:space=2,x=’E’, 则输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA

请分析该段代码的逻辑,填写缺少的部分。

public class 金字塔 {  
    public static void h(int space, char x){  
        int i;  
        if(x<'A' || x>'Z') return;  
        h(space+1,(char)(x-1));     // 填空   
        for(i=0; i<space; i++) System.out.printf(" ");  
        for(i=0; i<x-'A'; i++) System.out.printf("%c",'A'+i);  
        for(i=0; i<=x-'A'; i++) System.out.printf("%c",(char)(x-i)); // 填空   
        System.out.printf("\n");  
    }  
    public static void main(String[] args) {  
        int space=0;  
        char x= 'E';  
        h(space,x);  
    }  
}  
运行结果:
    A  
   ABA  
  ABCBA  
 ABCDCBA  
ABCDEDCBA  

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步??,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功??,我分文不取,若不成功??,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

文章来源:https://blog.csdn.net/qq_27489007/article/details/135032333
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。