【java_蓝桥杯算法训练】算法训练一

算法训练 输出米字形

资源限制

时间限制:1.0s   内存限制:512.0MB

根据输入的正整数n (1  米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上的字母按字典序依次减小,直到大写字母A。
矩阵的其它位置用英文句号.填充。



样例输入一

3


样例输出一

A.A.A
.BBB.
ABCBA
.BBB.
A.A.A


样例输入二

4



样例输出二

A..A..A
.B.B.B.
..CCC..
ABCDCBA
..CCC..
.B.B.B.
A..A..A


分析:

本题目要求是输出米字形,要求是 正整数n (1  米字形由一个(2n-1)*(2n-1)的矩阵组成。把他当作数组来进行模拟,也就是一个二位数组行和列都是2*n-1,数组中心数为n的值 例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。根据样例输出可以数组最中心的值为n,我们可以使用char(64+n)来表示,分为西北、正北、东北、正西、正东、西南、正南、东南八个方向来做,这类题目不难就是比较麻烦,掌握其规律就比较容易了。

代码详细解读:

import java.util.Iterator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		//用n来接受n传入的值
		int n=sc.nextInt();
		//定义一个char类型的二位数组,用来存放[2*n-1][2*n-1]个大小的数据;
		char arr[][]=new char[2*n-1][2*n-1];
		//对数组进行初始化,设置为'.'
		for (int i = 0; i < 2*n-1; i++) {
			for (int j = 0; j < 2*n-1; j++) {
				arr[i][j]='.';
			}
		}
		//我们先设置好数组的中心arr[n-1][n-1]为中心
		char c=(char) (64+n);
		//给数组中心赋值为(64+n)也就是大写字母
		arr[n-1][n-1]=c;
		//给西北方向赋值i和j没次-1
//		22——>11——>00这样的格式,然后按照arr[i+1][i+1]-1,对下一个就等于的上一个-1
		//西北
		
		for (int i = n-2; i>-1; i--) {
			arr[i][i]=(char) (arr[i+1][i+1]-1);
		}
//		和西北大致相同
//		东南是i-1 j+1的格式进行可以
		//东南
		for (int i = n; i<2*n-1; i++) {
			arr[i][i]=(char) (arr[i-1][i-1]-1);
		}
//	和东南类似
		//东北
		int u=n;
		for (int i = n-2; i>=0; i--) { 
			arr[i][u]=(char) (arr[i+1][u-1]-1);
			u++;
		}
//		正南和正北只需要对y的值进行变化即可
		//西南
		int k=n-2;
     for (int i = n;i<2*n-1; i++) {
	   arr[i][k]=(char) (arr[i-1][k+1]-1);
	   k--;
	}
    
     //正北
     for (int i = n-2; i >-1; i--) {
		arr[i][n-1]=(char) (arr[i+1][n-1]-1);
	}
//     正西和正东只需要对x的值进行变化即可
     //正西
     for (int i = n; i<2*n-1; i++) {
		arr[i][n-1]=(char) (arr[i-1][n-1]-1);
	}
     
     //正东
     for (int i = n; i <2*n-1; i++) {
		arr[n-1][i]=(char) (arr[n-1][i-1]-1);
		}
     
     //正西
     for (int i = n-2; i>=0; i--) {
		arr[n-1][i]=(char) (arr[n-1][i+1]-1);
	}
     for (int i = 0; i < 2*n-1; i++) {
    		for (int j = 0; j <2*n-1 ; j++) {
    			if(arr[i][j]!=' ')
    			System.out.print(arr[i][j]);
    		}
    		System.out.println();
    	}
 	}
	}


等腰三角形

资源限制
内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s
本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
1. 先用1,2,3,...的自然数拼一个足够长的串
2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是8时:

1
2 1
3 8
4 1
5 7
6 1
7 6
891011121314151

显示不正确时,参看:


 
输入,一个正整数n(3<n<300),表示三角形的高度
输出,用数字填充的等腰三角形。

为了便于测评,我们要求空格一律用"."代替。

例如:
输入格式
5

程序应该输出:
....1
...2.1
..3...2
.4.....1
567891011

再例如:
输入格式
10

程序应该输出:
.........1
........2.2
.......3...2
......4.....2
.....5.......1
....6.........2
...7...........0
..8.............2
.9...............9
101112131****617181

再例如:
输入格式
15

程序应该输出:

..............1
.............2.3
............3...2
...........4.....3
..........5.......1
.........6.........3
........7...........0
.......8.............3
......9...............9
.....1.................2
....0...................8
...1.....................2
..1.......................7
.1.........................2
2131****61718192****223242526


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int arr[][]=new int[600][600];
    for (int i = 0; i < arr.length; i++) {
		for (int j = 0; j < arr.length; j++) {
			arr[i][j]=-1;
		}
	}
    String s="";
    for(int i=1;i<=400;i++) {
    	s+=i+"";
    }
//    右边
    int k=0;
    for(int i=1;i<=n;i++) {
    	arr[i][n-i+1]=s.charAt(k++)-'0';
    }
//    下边
    for (int i = 2; i <=n*2-1; i++) {
		arr[n][i]=s.charAt(k++)-'0';
	}
//    右边
//    位置:
    int z=n*2-2;
    for(int i=n-1;i>1;i--) {
    arr[i][z]=s.charAt(k++)-'0';
    z--;
    }
    for (int i = 1; i <= n; i++) {
    	 for(int j=1;j<n+i;j++)
         {
             if(arr[i][j]==-1)
                 System.out.print(".");
             else
                 System.out.print(arr[i][j]);
         }
         System.out.println();
	}
	}

}



#Java#
全部评论
有效的时间节约时间
点赞 回复 分享
发布于 2022-08-28 17:21 河南

相关推荐

2024-12-30 22:49
长沙理工大学 Java
神哥了不得:没什么可以指导的地方了,简历确实牛,我大号分享过投递策略,广投就行
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务