A. 用c語言怎樣輸出一個N階蛇形矩陣
先說思想:N=4時候和N=5的時候前面4條斜線上三角是相同的!所以這個可以用遞歸做。還有個規律很重要就是當2個數的橫縱坐標和都是N+1的時候這2個值的和都是N*N+1!問題就很容易解決了!
寫個大概:
int **array=NULL;
void main()
{
int n;
scanf("%d",&n);
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
array[i]=(int *)malloc(n*sizeof(int));
}
Testingval(n,n);
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
printf("%d ",array[i][j]);
printf("\n");
}
free(array);
}
int Testingval(int a,int n)//a 表示n行中的第幾個。。n表示是N界矩陣!
{ if(n==1)
{ array[0][0]==1;
array[n][n]=n*n;
}
else
Testingval(a-1,n);
if(a%2)
{ int i=1;
array[0][a-1]=array[0][a-2]+1;
array[n-1][n-a]=n*n+1-array[0][a];
while(i<a)
{
array[i][a-1-i]=array[i-1][a-i+1]+1;
array[n-1-i][n-a+i]=n*n+1-array[i][a-i];
i++;
}
}
else
{int i=1;
array[a-1][0]=array[a-2][0]+1;
array[n-a][n-1]=n*n+1-array[a-1][0];
while(i<a)
{
array[a-1-i][i]=array[a-i+1][i-1]+1;
array[n-a+i][n-1-i]=n*n+1-array[a-1-i][i];
i++;
}
}
}
}
B. 求蛇形方陣c語言代碼
#include <stdio.h>
#define N 5 /*可改變數組大小*/
#define M 0 /*改變蛇形數組 方向*/
/*
M = 0
1 3 4
2 5 8
6 7 9
M = 1
1 2 6
3 5 7
4 8 9
*/
void main()
{
int x=0,y=0,b,k=1,i,j,w=1;
int s[N][N];
b = N*N;
s[0][0]=1;
for(i=2; i<=b; i++)
{
if((y == 0) && (x != (N-1)) && (x%2 == (0+M)%2))
{
x++;
k = 1;
w = 0;
}
if((x == 0) && (y != (N-1)) && (y%2 == (1+M)%2))
{
y++;
k = 0;
w = 0;
}
if(x == (N-1) && (y%2 == ((N%2+1)%2+M)%2))
{
y++;
k = 1;
w = 0;
}
if(y == (N-1) && (x%2 == (N%2+M)%2) && !( (x == N-1) && (y == N-1) ) )
{
x++;
k = 0;
w = 0;
}
if((w == 1) && (k == 1))
{
x--;
y++;
}
if((w == 1) && (k == 0))
{
x++;
y--;
}
s[x][y] = i;
w = 1;
}
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
printf("%d\t",s[i][j]);
}
printf("\n");
}
}
C. C語言 蛇形矩陣源程序寫法
1 3 4
2 5
6。。。。
這是有規律的,1,2,3,4,5,6.。。。。位置也有規律。程序有解釋。所以我們可以
用數組來實現。
程序和解釋如下:
#include"stdio.h"
voidmain()
{
inta[20][20],i,j,c=1,x=1,n,s=0;
printf("請輸入n的值: ");
scanf("%d",&n);
while(c<=n*(n+1)/2)
{
for(i=s,j=0;i>=0,j<=s;i--,j++)
{
if(s%2!=0)a[i][j]=c++;//無論n值為多少,規律(奇偶性與遞增遞減之間的關系)不變。
elsea[j][i]=c++;
}
s++;
}//此為左上部分。
while(c<=n*n)
{
for(i=x,j=s-1;i<=s-1,j>=x;i++,j--)
{
if(n%2==0)/*這里因為n值的奇偶性影響了規律(奇偶性與遞增遞減之間的關系)
所以要對n值得奇偶性進行判定*/
{
if(x%2!=0)a[i][j]=c++;
elsea[j][i]=c++;
}
else
{
if(x%2==0)a[i][j]=c++;
elsea[j][i]=c++;
}
}
x++;
}//此為右下部分。
for(i=0;i<n;i++)//輸出二維數組a[n][n],輸出蛇形矩陣。
{
for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf(" ");
}
}
D. c語言蛇形矩陣。 輸入n輸出矩陣 例如輸入3 輸出 167 258 349
//以前寫得,按蛇形增長方向給每個位置賦值#include#includeint*p=NULL;//當前位置int*s=NULL;//開始位置intn=0;intfunc(intnum,intway){if(num==n*n+1)return0;*p=num;switch(way)//四個方向,下,斜上,右,斜下{case0://向下時下一個位置在p+n處,如當前位置是a[1][0],下個位置應該是a[2][0],中間相差n個數據p=p+n;if((p-s)%n==0)way=1;//下個方向要麼是斜上,要麼斜下,由當前是上三角還是下三角決定elseway=3;break;case1:p=p-n+1;if(p-s
E. C語言 蛇形矩陣問題
代碼如下:
#include<stdio.h>
intmain()
{
intn;
staticinta[100][100];
inti=0,j=0;
intk,x,y;
//printf("請輸入整數N,N<=100 ");
scanf("%d",&n);
for(k=1;k<=n*n;k++)
{
a[i][j]=k;
if((i+j)%2==0)
{
if(i!=n-1&&j!=0)
{
i=i+1;
j=j-1;
}
elseif(i==n-1)
{
//j=j+1;
break;
}
else
{
i=i+1;
}
}
else
{
if(i!=0&&j!=n-1)
{
i=i-1;
j=j+1;
}
elseif(j==n-1)
{
break;
//i=i+1;
}
else
{
j=j+1;
}
}
}
for(x=0;x<n;x++)
{
for(y=0;y<n-x;y++)
{
if(y==(n-x-1))
printf("%d",a[x][y]);
else
printf("%d",a[x][y]);
}
printf(" ");
}
return0;
}
你測試下,看對不對?