螺旋输出数字 用你熟悉的语言编写一个打印程序输入一个自然数N后,打印1至N的所有自然数,打印结果是环绕方式,效果如下:
用你熟悉的语言编写一个打印程序输入一个自然数N后,打印1至N的所有自然数,打印结果是环绕方式,效果如下:
21 ... N-1 N
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
问题点数:15、回复次数:11Top
1 楼Rochery(Rochery)回复于 2005-04-11 17:56:43 得分 0
题目如上,多谢指点,急用阿Top
2 楼Rochery(Rochery)回复于 2005-04-11 18:14:50 得分 0
哭!!!!!!怎么没有回答阿 ??????????不会的 帮忙顶下 也 好阿 !!!!!!!!!!!,谢谢!!!!!!!!!!!!!Top
3 楼Rochery(Rochery)回复于 2005-04-11 18:16:44 得分 0
上面说的 不是很清楚!又 想要看图的请加qq:4067756
在线等结果的 阿 。Top
4 楼Kid4you(Kid4you)回复于 2005-04-11 18:26:14 得分 0
晚上给你给程序.Top
5 楼Rochery(Rochery)回复于 2005-04-11 18:37:10 得分 0
to:: Kid4you(Kid4you)
谢谢,要看图吗?Top
6 楼Rochery(Rochery)回复于 2005-04-11 20:40:34 得分 0
Kid4you(Kid4you)大哥怎么样 阿 ?急等阿 !Top
7 楼Kid4you(Kid4you)回复于 2005-04-11 22:43:01 得分 0
回来了,马上写,高中做过:>Top
8 楼hcj2002(流浪者·躬自厚而薄责于人 )回复于 2005-04-11 23:12:30 得分 5
螺旋矩阵
http://blog.csdn.net/hcj2002/archive/2005/01/06/242380.aspxTop
9 楼jackgwf()回复于 2005-04-11 23:21:48 得分 10
#include<iomanip.h>
void main()
{
int i,k,n,m,x0,y0,x1,y1,z=0;
while(1){
cout<<"请输入行数(行数>0):";
cin>>n;
if(n>0)
break;}
int a[20][20];
m=n*n;
if(n%2==0){
i=0,k=0,x1=n,y1=n,x0=0,y0=0;
while(1){
for(k;k<y1;k++)
a[i][k]=m--;
y1--,i++,k--;
for(i;i<x1;i++)
a[i][k]=m--;
x1--,k--,i--;
for(k;k>=y0;k--)
a[i][k]=m--;
y0++,i--,k++;
for(i;i>x0;i--)
a[i][k]=m--;
x0++,k++,i++;
if(m<1)
break;}
}
if(n%2!=0){
i=n-1,k=n-1,x1=n,y1=n,x0=0,y0=0;
while(1){
for(k;k>=y0;k--)
a[i][k]=m--;
y0++,i--,k++;
for(i;i>=x0;i--)
a[i][k]=m--;
x0++,k++,i++;
for(k;k<y1;k++)
a[i][k]=m--;
y1--,i++,k--;
for(i;i<x1-1;i++)
a[i][k]=m--;
x1--,k--,i--;
if(m<1)
break;}
}
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
cout<<setw(4)<<a[i][k];
cout<<endl;
}
cout<<endl;
}
Top
10 楼Kid4you(Kid4you)回复于 2005-04-13 13:43:26 得分 0
#include <iostream.h>
#include <math.h>
int a[100][100];
void main()
{
int n, c, i = 50, j = 50, temp = 1, k = 1, num = 1;
cin >> n;
// 模拟螺旋填数
a[50][50] = 1;
for (c=1; c<=(int)sqrt(n)-1; ++c)
{
k = temp;
while (k>0) //向右
{
++j;
a[i][j] = ++num;
--k;
}
k = temp;
while (k>0) //向下
{
++i;
a[i][j] = ++num;
--k;
}
k = ++temp;
while (k>0) //向左
{
--j;
a[i][j] = ++num;
--k;
}
k = temp;
while (k>0) //向上
{
--i;
a[i][j] = ++num;
--k;
}
++temp;
}
// 输出
for (int ii=i; ii<=i+(50-i)*2+1; ++ii)
{
for(int jj=j; jj<=j+(50-j)*2+1; ++jj)
{
if (a[ii][jj]>0 && a[ii][jj]<=n )
{
cout << a[ii][jj] << " ";
if (a[ii][jj]<10) // 多输出一个空格站位
cout << " ";
}
else if(a[ii][jj] > n) {cout << " ";}
}
cout << endl;
}
}Top
11 楼Rochery(Rochery)回复于 2005-04-13 23:59:42 得分 0
谢谢大家!!!!!!!!!!!谢谢hcj2002(流浪者·躬自厚而薄责于人) (毕业ING & 求职ING) ,谢谢jackgwf(), 谢谢Kid4you(Kid4you) 。hcj2002(流浪者·躬自厚而薄责于人) (毕业ING & 求职ING) 也在找工作啊,我也是啊,好难找啊,我在这里是新手啊,请大家多多指教,Kid4you(Kid4you)对不起啊,我管理帖子的时候你的程序还没有贴上来,我就把分数分给jackgwf和hcj2002(流浪者·躬自厚而薄责于人) (毕业ING & 求职ING) 了啊所以虽然你的是最正确的了但是没有分给了,很遗憾啊。Top
相关问题
- 求N个不连续自然数的所有排列
- N个自然数的全排列算法
- 我用Foxmail收sohu的邮件时,怎么总到DELE n(n为一自然数)时就停止收邮件?
- 输入一个自然数n求n! ,同时统计结果中有多少个0
- 如何判断n个自然数中相同个数最多的数是多少?
- 请问VB怎么用辗转相减法求两个自然数M,N的最大公约数和最小公倍数?
- 关于时间复杂度O的定义,书上这样的:如果存在正的常数和自然数N0,使得当N>=N0时有f(N)<=Cg(N),则称函数f(N)当N充分大时上有界,记为f(N)=O(
- 关于自然数的内容
- 一个大于10的自然数,最后一位数值移到最前一位.得到一个新的自然数.新的自然数刚好是这个自然数的两倍.求此自然数为?
- 一个大于10的自然数,最后一位数值移到最前一位.得到一个新的自然数.求此自然数为?





