| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 462 人关注过本帖
标题:[求助]高深问题,请教中.....
只看楼主 加入收藏
chaogede
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-15
收藏
 问题点数:0 回复次数:6 
[求助]高深问题,请教中.....

用C语言编写一个程序,要求输出字轮转组成一正方形,已n作为边长,比如:

1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
n=4


1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9

n=5



请教中...
2007-04-16 04:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
falg=1 下
falg=2 右
falg=3 上
falg=4 左

再设置一个变量控制每次走的长度.c,l(表示行,列,初始值为n,n)每做一次(flag的变化)来改变c,l的值.

倚天照海花无数,流水高山心自知。
2007-04-16 07:49
chaogede
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-15
收藏
得分:0 
回复:(chaogede)[求助]高深问题,请教中.....
汗 不懂啊..
具体代码可以实现看下吗?
2007-04-16 13:37
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

加点解释

//打印数字,转圈

#include<stdio.h>
#define N 9 //N控制方阵的大小
int main(void)
{
int i=0,j=0,a[N][N]={1},k,flag=1; //flag控制数组变化的方向
for(k=1;k<N*N;k++)
{
switch(flag) //根据数组变化方向进行相应的加减
{
case 1:
i++;break;
case 2:
j++;break;
case 3:
i--;break;
case 4:
j--;break;
}
if(i>=N) //对超越数组范围的处理
{
flag=2;
i--;
j++;
}
if(j>=N)
{
flag=3;
j--;
i--;
}
if(i<0)
{
flag=4;
i++;
j--;
}
if(j<0)
{
flag=1;
j++;
i++;
} //对超越数组范围的处理
if(a[i][j]!=0) //如果数组元素已经赋值,改变方向
{
switch(flag)
{
case 1:
i--;j++;flag++;break;
case 2:
j--;i--;flag++;break;
case 3:
i++;j--;flag++;break;
case 4:
j++;i++;flag=1;break;
}
}
a[i][j]=k+1;
}

for(i=0;i<N;i++) //打印数组
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
return 0;
}

[此贴子已经被作者于2007-4-16 19:47:30编辑过]


雁无留踪之意,水无取影之心
2007-04-16 19:34
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
# include<stdio.h>
void main()
{
int n=4;
int m=(n+1)/2;
int i,j,k=0;
int mat[4][4];
int t=0;
for(i=0;i<m;i++)
{
for(j=i;j<=n-i-1;j++)
mat[i][j]=++k;
for(j=i+1;j<=n-i-1;j++)
mat[j][n-i-1]=++k;
for(j=n-i-2;j>=i;j--)
mat[n-i-1][j]=++k;
for(j=n-i-2;j>=i+1;j--)
mat[j][i]=++k;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{printf("%4d",mat[i][j]);
t++;
if(t%4==0)
printf("\n");}
return;
}
2007-04-16 19:39
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
# include<stdio.h>
void main()
{
int n=4;
int m=(n+1)/2;
int i,j,k=0;
int mat[4][4];
int t=0;
for(i=0;i<m;i++)
{
for(j=i;j<=n-i-1;j++)
mat[i][j]=++k;
for(j=i+1;j<=n-i-1;j++)
mat[j][n-i-1]=++k;
for(j=n-i-2;j>=i;j--)
mat[n-i-1][j]=++k;
for(j=n-i-2;j>=i+1;j--)
mat[j][i]=++k;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{printf("%4d",mat[i][j]);
t++;
if(t%4==0)
printf("\n");}
return;
}
2007-04-16 19:40
guosheng1987
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-4-16
收藏
得分:0 

#include "stdlib.h"
#include "stdio.h"

int main()
{
int N;
printf("input line:\n");
scanf("%d",&N);
int a[9][9] = {0};
int i,j,x;
int k = 0;
int m = 0,n = N;
int p;

for(p = 0;p<(N+1)/2;p++)
{
for(i = m,j = m;i<n-1;i++)
a[i][j] = ++k;

for(i = n-1,j = m;j<n-1;j++)
a[i][j] = ++k;

for(i = n-1,j = n-1;i>m;i--)
a[i][j] = ++k;

for(i = m,j = n-1;j>m;j--)
a[i][j] = ++k;
x = k+1;
m++;
n--;
}
if(N/2)
{
a[N/2][N/2] = x;
}

for(i = 0;i<N;i++)
{
for(j = 0;j<N;j++)
{
printf("%2d ",a[i][j]);
}
printf("\n");
}
system("pause");
}

2007-04-17 11:21
快速回复:[求助]高深问题,请教中.....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015932 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved