蓝桥杯专题-真题版含答案-【三角螺旋阵】【干支记年法】【异或加密法】【金字塔】
Unity3D特效百例 | 案例项目实战源码 | Android-Unity实战问题汇总 |
---|---|---|
游戏脚本-辅助自动化 | Android控件全解手册 | 再战Android系列 |
Scratch编程案例 | 软考全系列 | Unity3D学习专栏 |
蓝桥系列 | ChatGPT和AIGC |
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
😜三角螺旋阵
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充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/
📢这位道友请留步??,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功??,我分文不取,若不成功??,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!