黑马程序员技术交流社区
标题:
一道题,关于迭代(升级版)
[打印本页]
作者:
李跃达
时间:
2013-1-26 21:59
标题:
一道题,关于迭代(升级版)
本帖最后由 张向辉 于 2013-1-30 10:31 编辑
有一道题,从键盘上接受一个数字,比如输入的是5,则输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
作者:
谢毅
时间:
2013-1-27 11:11
这题有意思,不过我用手机上的^_^,坐看回复
作者:
苏克
时间:
2013-1-27 11:46
做过螺旋数组,这个3角的还真做过
作者:
焦健
时间:
2013-1-27 16:05
本帖最后由 焦健 于 2013-1-27 17:06 编辑
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Yuan {
/**有一道题,从键盘上接受一个数字,比如输入的是5,则输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader bufr=null;
try{
bufr=new BufferedReader(new InputStreamReader(System.in));
String str=null;
str=bufr.readLine();//读一行数据
show(Integer.parseInt(str));//将数据转换为int参数传递进去
}catch(Exception e){
throw new RuntimeException("失败");
}finally{
try{
if(bufr!=null){
bufr.close();
}
}catch(Exception e){
throw new RuntimeException("失败");
}
}
}
public static void show(int value){
int[][] arr=new int[value][value];
int i=0,j=0;//数组的角标
for(int x=1,y=value;arr[i][j+1]==0||arr[i+1][j-1]==0||arr[i-1][j]==0;){
if(arr[i][j+1]==0){
if(x==1)j--;
for(int a=0;a<y;a++){
arr[i][++j]=x++;
}
y--;
}
if(arr[i+1][j-1]==0){
for(int a=0;a<y;a++){
arr[++i][--j]=x++;
}
y--;
}
if(arr[i-1][j]==0){
for(int a=0;a<y;a++){
arr[--i][j]=x++;
}
y--;
}
}//遍历打印数组
for(int p=0,a=0; p<value; p++){
for(int q = 0; q<value; q++){
if((a=arr[p][q])!=0)
if(a<10)
System.out.print(a+" ");
else
System.out.print(a+" ");
}
System.out.println();
}
}
}
复制代码
这样做就可以实现这个功能了。。对数组操作是一个单独的方法,便于复用。。
作者:
王小丑
时间:
2013-1-27 17:55
楼上的 我试了一下 你这复用不了啊
作者:
焦健
时间:
2013-1-27 19:02
王文正 发表于 2013-1-27 17:55
楼上的 我试了一下 你这复用不了啊
可以的啊。。
作者:
范天成
时间:
2013-1-27 20:40
我也来个,只是研究算法,代码比较乱:
class Luoxuan{
public static void main(String[] args)
{
int[][] arr=new int[50][50];//这个数组的长度根据自己需要设定,越大越好。
int k=20;//这是要输入的数字
int n=0,m=k-1,z=k-1,t=1;
int i=0,j=0;
arr[0][0]=1;
while(n<k/2+1)//递归循环,每循环一次由外向里将三角形边上的数字装到数组里。里面的判断条件是我自己琢磨了定的,
{
i=n;
for(j=n;j<m;j++)//获取横向边的数字
{ if(arr
[j]==0)
arr
[j]=++t;
}
while(j>=n)//获取斜向边的数字
{
if(arr
[j]==0)
arr
[j]=++t;
j--;
i++;
}
for(i=z;i>n;i--)//获取竖向边的数字
{ if(arr
[n]==0)
arr
[n]=++t;
}
m-=2;
z-=2;
n++;
}
for(i=0;i<=k-1;i++)//输出螺旋数字
{
for(j=0;j<=k-1-i;j++)
{ if(arr
[j]>=100)
System.out.print(arr
[j]+" ");//空格是为了输出数字对齐,三位数都可以对齐,再多就得添加判断了,下面同理。
else
if(arr
[j]>=10&&arr
[j]<100)
System.out.print(arr
[j]+" ");
else
System.out.print(arr
[j]+" ");
}
System.out.println();
}
}
}
求技术分,版主……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2