根据行号,打印图案
输入5:
打印如下
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
输入8:
打印如下:
1 2 3 4 5 6 7 8
21 22 23 24 25 26 9
20 33 34 35 27 10
19 32 36 28 11
18 31 29 12
17 30 13
16 14
15
求高手指教
输入5:
打印如下
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
输入8:
打印如下:
1 2 3 4 5 6 7 8
21 22 23 24 25 26 9
20 33 34 35 27 10
19 32 36 28 11
18 31 29 12
17 30 13
16 14
15
求高手指教
解决方案 »
- Rhino怎么解析网页上的javascript
- xml文件中的元素和属性
- 【 功能已实现】java实现手机发送信息
- s2sh整合时,怎样通过 一个字段来获取此类的对象。。
- hibernate 和 ibatis 能支持的最大访问量和同时在线量分别是多少?
- hibernte不能执行查询问题
- 高分求解
- 去除EJB, 什么办法改动最小
- (没钱了!)在发布到 WEBLOGIC 上的一个EJB 工程,用到一个 jdom.jar ,我运行时报这个错误:java.lang.NoClassDefFoundError: org/jdom/input
- 请求大佬支援!!!为什么我的键盘点击事件无效?
- 急修改java題....不懂
- 求大大解题
import java.util.List;
import java.util.Scanner;
public class Test { public static void main(String args[]) throws Exception {
Scanner scan = new Scanner(System.in);
int in = scan.nextInt();
List<Integer[]> list = new ArrayList<Integer[]>();
for(int i = in; i > 0; i--){
list.add(new Integer[i]);
}
int c = 1;
int index = 1;
int nextArray = 0;
boolean notAllFull = false;
while(true){
for(Integer[] all : list){
for(Integer itg : all){
if(itg == null || itg == 0){
notAllFull = true;
}
}
}
if(!notAllFull){
break;
}else{
notAllFull = false;
}
Integer[] is = list.get(nextArray);
if(nextArray == 0){
for(int i = 0; i < is.length; i++){
is[i] = c++;
}
nextArray++;
continue;
}else{
if(index%2!=0){
for(int i = is.length - 1; i >= 0; i--){
if(is[i] == null || is[i] == 0){
is[i] = c++;
break;
}
}
//等于最大长度的时候
boolean isFull = true;
if(nextArray == list.size()-1){
nextArray--;
index++;
}else{
Integer[] next = list.get(nextArray+1);
for(Integer it : next){
if(it == null || it == 0){
isFull = false;
break;
}
}
if(isFull){
nextArray--;
}else{
nextArray++;
}
}
}else{
for(int i = 0 ; i < is.length; i++){
if(is[i] == null || is[i] == 0){
is[i] = c++;
break;
}
}
boolean isFull = true;
if(nextArray != 0){
Integer[] next = list.get(nextArray-1);
for(Integer it : next){
if(it == null || it == 0){
isFull = false;
break;
}
}
if(isFull){
Integer[] it = list.get(nextArray);
for(int i = 0; i < it.length; i++){
if(it[i] == null || it[i] == 0){
it[i] = c++;
}
}
index++;
nextArray++;
}else{
nextArray--;
}
}
}
}
}
for(Integer[] all : list){
for(Integer i : all){
System.out.print(i + " ");
}
System.out.println();
}
}
}
public class TestDemo {
static int count = 1;
/** * @param args */
public static void main(String[] args) {
int a[][] = new int[20][20];
int number = 10;
int gride = 0;
// danyuan(a,number,gride);
while(number >= 1){
danyuan(a,number,gride);
gride+=1;
number -= 3;
}
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
System.out.print(a[i][j]==0?"\t":a[i][j] + "\t");
}
System.out.println();
}
}
public static void danyuan(int a[][],int number,int gride){
for(int i=0;i<number-1;i++){
a[gride][gride+i]=count++;
}
for(int i=0;i<number;i++){
a[gride + i][number-(i-gride)-1]=count++;
}
for(int i=number-2;i>0;i--){
a[gride + i][gride]=count++;
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Print().doPrint(10);
}
/**
* 答应算法
1 2 3 4 5 6 7 8
21 22 23 24 25 26 9
20 33 34 35 27 10
19 32 36 28 11
18 31 29 12
17 30 13
16 14
15
*/
public void doPrint(int num){
for(int i=1;i<=num;i++){
for(int j=1;j<=num+1-i;j++){
doDarw(i,j,num);
}
System.out.println();
}
}
/**
* @param i 表示行数
* @param j 表示每行第几个数
*/
public void doDarw(int i,int j,int num){
//i-1>0比如第二行说
//开始部分
if(i-1>0&j<i&j<=(num-i+1)/2){
int number=doCount(num,j*3)+j+1-i;
System.out.print(number+" ");
}
//每次第加一个数,从i个数开始递加,递加到(num-i)
//中间部分
else if(j>=i&j<=num-2*(i-1)){
int number=doCount(num,(i-1)*3)+j+1-i;
System.out.print(number+" ");
}
//结尾部分
else {
int number=doCount(num,((num-i-j+1)*3)+1)+i-(num-i-j+2);
System.out.print(number+" ");
}
}/**
* @param begin 起始值
* @param cicle 圈数
* @return返回叠加数
*/
public int doCount(int begin,int cicle){
int sum=0;
for(int i=0;i<cicle;i++){
sum+=begin-i;
}
return sum;
}
}1 2 3 4 5 6 7 8 9 10
27 28 29 30 31 32 33 34 11
26 45 46 47 48 49 35 12
25 44 54 55 50 36 13
24 43 53 51 37 14
23 42 52 38 15
22 41 39 16
21 40 17
20 18
19