美文网首页
2018年Java方向C组第八题

2018年Java方向C组第八题

作者: D丝学编程 | 来源:发表于2021-03-30 08:50 被阅读0次

标题:等腰三角形

本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:

  1. 先用1,2,3,...的自然数拼一个足够长的串
  2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
    比如,当三角形高度是8时:


    2.png

    输入,一个正整数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
1011121314151617181

再例如:
输入:
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
21314151617181920212223242526

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

解析:

Scanner input  = new Scanner(System.in);
int high = input.nextInt();  //输入三角形高度
//long start=System.currentTimeMillis();
char[][] arr = new char[high][2*high-1];
//为二维数组每个元素赋值.
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        arr[i][j] = '.';
    }
}
//根据高度求总字符个数,2*h-3=两斜边的字符个数总和,2*h-1为底边的字符个数
int charCount = 2*high-3 + 2*high-1;  //求总共字符个数
String str = "";
//用循环将所有数字组合转换成字符串,最多循环次数应该是字符总个数
for (int i = 1; i <= charCount; i++) 
{
    str += i+"";
    if(str.length() >= charCount)  //字符串长度大于等于总字符个数的时候退出
    {
        str = str.substring(0, charCount);
        break;
    }               
}
int index = 0;  //保存数字字符串当前的下标
//给左斜边填充
int x = 0;
int y = high-1;     
for (int i = 1; i <= high-1; i++) {
    arr[x][y] = str.charAt(index++);
    x++;
    y--;
}
//给底部填充
x = high-1;
y = 0;
for (int i = 1; i <= 2*high-1; i++) {
    arr[x][y] = str.charAt(index++);
    y++;
}
//给右斜边填充,从右下向左上填充,最后一个字符不需要填充
x=high-2;
y=2*high-3;
for (int i = 1; i <= high-2; i++) {
    arr[x][y] = str.charAt(index++);
    x--;
    y--;
}       
//嵌套循环打印结果
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        if(j <= i+high-1)   //程序右边的点不用打印
            System.out.print(arr[i][j]);
    }
    System.out.println();
}

//long end=System.currentTimeMillis(); //获取结束时间      
//System.out.println("程序运行时间: "+(end-start)+"ms");

相关文章

  • 2014年Java方向C组第八题

    标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上...

  • 2016年Java方向C组第八题

    冰雹数 任意给定一个正整数N,如果是偶数,执行: N / 2如果是奇数,执行: N * 3 + 1 生成的新的数字...

  • 2018年Java方向C组第八题

    标题:等腰三角形 本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是: 先用1,2,3,...的自然...

  • 2017年Java方向C组第八题

    标题:拉马车 小的时候,你玩过纸牌游戏吗?有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。 其规则简述如下...

  • 2015年Java方向C组第八题

    标题:移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,...

  • 2014年Java方向C组第九题

    标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 ...

  • 2015年Java方向C组第二题

    第二题 标题:立方尾不变 有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,.... 请...

  • 2015年Java方向C组第三题

    第三题 标题:无穷分数 无穷的分数,有时会趋向于固定的数字。 请计算【图1.jpg】所示的无穷分数,要求四舍五入,...

  • 2018年Java方向C组第四题

    标题:第几个幸运数 到x星球旅行的游客都被发给一个整数,作为游客编号。x星的国王有个怪癖,他只喜欢数字3,5和7。...

  • 2015年Java方向C组第四题

    标题:循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。 比如,11/13=6=>0.846...

网友评论

      本文标题:2018年Java方向C组第八题

      本文链接:https://www.haomeiwen.com/subject/cstrxltx.html