CodeWars练习之打印菱形
来源:互联网 发布:抗衰老精华 知乎 编辑:程序博客网 时间:2024/06/11 01:53
因为是上午刷到的题目第一次提交时未通过,再加上网速问题,关了界面。然后,就找不到原题了。只记得要求:
1.输入的如果是偶数,返回null。
2.输入的如果是奇数,返回的是String,其样式是,该数的中间值的那一行全部为“*”,往上/下一次递减两个“*”。像下面这个图:
我的思路如下:
用一个长度为n的二维数组来保存这些元素的值。(i: 行坐标,j:列坐标)分析可以知道,第一行的列坐标是n/2, 第二行是n/2-1~n/2+1, 在到i=n/2之前都能够满足j=n/2-i到j=n/2+i;这就是上半部分。在下半部分的时候,因为受上半部分的思路和一直以来总是习惯在两个for循环内对元素赋值的影响一直尝试找到j的取值范围,可是并没有找到。拖延到下午才想到,他们上下部分是对称的,我可以用行赋值的方法。就得到了下面的代码:
public static String[][] test(int n){String[][] star=new String[n][n];for (int i = 0; i < star.length; i++) {//初始化for (int j = 0; j < star.length; j++) {star[i][j]=" ";}//设置上部分if (i<n/2+1) {for (int j = n/2-i; j < n/2+i+1; j++) {star[i][j]="*";}}}//设置下半部分for (int i = n/2+1; i < star.length; i++) {int temp=n-i-1;star[i]=star[temp];}return star; }
因为题目要求是返回String类型,所以后面的代码主要是把String[][]变成String。在这里我用了StringBuffer。如下:
public static String print(int n) { // TODO your code here if (n%2==0) {return null;}else{StringBuffer sb=new StringBuffer();String[][] star=test(n);for (int i = 0; i < star.length; i++) {for (int j = 0; j < star.length; j++) {sb.append(star[i][j]);}sb.append("\n");}return sb.toString();} }
最后可得到结果如下:
n=5时,
n=7时,
0 0
- CodeWars练习之打印菱形
- codewars-6kyu-give a diamond(打印菱形)
- CodeWars练习之反转数组
- CodeWars练习之三角数
- C语言之打印菱形
- if--else的练习,for练习,算法,金字塔,菱形打印
- java学习之打印菱形和空心菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- 打印菱形
- hdu 5791 dp
- POJ-2367 Genealogical tree 【拓扑模板题】
- HDU 3236 Gift Hunting dp 背包
- 设计模式经典书籍推荐
- HDU 5734 Acperience 【数学计算】
- CodeWars练习之打印菱形
- vim的常用命令
- dedecms 首页调用作者头像
- 恢复windows7的开始菜单栏的搜索框
- 二叉树的复制
- 2016多校联合训练赛 第三场1010 Rower Bo hdu 5761
- Oracle同义词创建及其作用
- 浅谈初识前端
- HDU 3232 Crossing Rivers