2个算法 求解!

peng2739956 2011-12-16 01:11:17
第一个:
设计一个三角螺旋输出如下:
1

2 9

3 10 8

4 5 6 7

第二个:
当N=4时能输出以下数字, 其中N为通用的,当N=任何一个数时都能输出以下规律的图形。
1 2 3 4
11 9 10 5
15 12 8 6
16 14 13 7

第二个 是蛇形三角+螺旋三角拼接成的矩形,11-12-13 这条斜线是蛇形 1-9-8-7是螺旋。

不知道如何写啊 各位 给出详细代码和注释啊。
...全文
210 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonemqy 2011-12-16
  • 打赏
  • 举报
回复
第二个你的需求不是很清楚。你给一个6×6或以上的例子。
stonemqy 2011-12-16
  • 打赏
  • 举报
回复
先说第一个,第二个下周上班了再弄。

int size = 10;

int i=1;
int x = 0;
int y = 0;
int[,] A = new int[size, size];

for (int j = 0; j < size; j++)
{
for (int k = 0; k < size; k++)
{
A[j, k] = 0;
}
}

int flag = size * (size + 1) / 2;

while (i <= flag)
{
if (x + 1 < size)
{
if (A[x + 1, y] == 0)
{
A[x, y] = i;
i++;
x++;
continue;
}
}

if (y + 1 < size)
{
if (y <= x)
{
if (A[x, y + 1] == 0)
{
A[x, y] = i;
i++;
y++;
continue;
}
}
}

while (A[x, y] == 0)
{
A[x, y] = i;
i++;
if (A[x - 1, y - 1] == 0)
{
x--;
y--;
}
else
{
x++;
break;
}
}
}

for (int j = 0; j < size; j++)
{
for (int k = 0; k <= j; k++)
{
Console.Write("{0}\t", A[j,k]);
if (j == k)
{
Console.WriteLine();
}
}
}

Console.ReadLine();
铜臂阿铁木 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hefeng_aspnet 的回复:]

输出下三角矩阵螺旋数,比如,输入为4,则输出:

1
2 9
3 10 8
4 5 6 7


输入为5,则输出:

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


代码如下,大致思想就是设一个方向变量,-1为向下,0为向右,1为向左上,然后控制二维数组下标为数组赋值,最后打印。

修改print()方法的传入参……
[/Quote]

这么高效的算法lz居然嫌弃!!?
难道要用矩阵计算去实现,那个代码也不简单吧。
笑而不语了。
ayzen1988 2011-12-16
  • 打赏
  • 举报
回复
看看可以不

int n = 6;
int[,] arr = new int[n, n];
arr[0, 0] = 1;
int X=0,Y=0;
for (int i = 0; i < n; i++)
{
for (int k = 0; k < n - i; k++)
{
if (i % 3 == 1)
{
arr[X, Y] = arr[X, Y - 1] + 1;
if (k == n - i - 1)
{
X--;
Y--;
break;
}
Y++;
}
if (i % 3 == 0)
{
if (X - 1 < 0)
{
X++;
continue;
}
arr[X, Y] = arr[X - 1, Y] + 1;
if (k == n - i - 1)
{
Y++;
break;
}
X++;
}
if (i % 3 == 2)
{
if (X < 0 || Y < 0)
continue;
arr[X, Y] = arr[X + 1, Y + 1] + 1;
if (k == n - i - 1)
{
X++;
break;
}
X--;
Y--;
}
}
}
peng2739956 2011-12-16
  • 打赏
  • 举报
回复
代码冗余太大 否定掉
烟波钓 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hefeng_aspnet 的回复:]
输出下三角矩阵螺旋数,比如,输入为4,则输出:

1
2 9
3 10 8
4 5 6 7


输入为5,则输出:

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


代码如下,大致思想就是设一个方向变量,-1为向下,0为向右,1为向左上,然后控制二维数组下标为数组赋值,最后打印。

修改print()方法的传入参数……
[/Quote]牛人 标记了
csdn_aspnet 2011-12-16
  • 打赏
  • 举报
回复
输出下三角矩阵螺旋数,比如,输入为4,则输出:

1
2 9
3 10 8
4 5 6 7


输入为5,则输出:

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


代码如下,大致思想就是设一个方向变量,-1为向下,0为向右,1为向左上,然后控制二维数组下标为数组赋值,最后打印。

修改print()方法的传入参数即可。




view plaincopy to clipboardprint?public class Sort {
public static void main(String[] args){
print(5);
}
static void print(int n){
int l = n;
int sum = 0;
for(int i=1; i<=n; i++){
sum += i;
}
int a[][] = new int[n][n];
int s = 1;
int i = 0, j = 0;
int d = -1;
for(int k=1; k<=sum; k++){
switch (d) {
case -1:
a[i][j] = s++;
if(i<n-1){
i++;
}
else{
n--;
j++;
d = 0;
}
break;
case 0:
a[i][j] = s++;
if(i == (l-1)){
if(j<i){
j++;
}
else{
i--;
j--;
d = 1;
}
}
else if(a[i][j+1] == 0){
j++;
}
else{
i--;
j--;
d = 1;
}
break;
case 1:
a[i][j] = s++;
if(a[i-1][j-1] == 0){
i--;
j--;
}
else{
i++;
d = -1;
}
break;
default:
break;
}
}
for(int p=0; p<l; p++){
for(int q=0; q<=p; q++){
System.out.print(a[p][q] + " ");
}
System.out.println();
}
}
}

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧