❶ 用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++;
}
}
}
}
❷ C語言,蛇形矩陣
#include
<stdio.h>
int
main(){
//該程序雖然能通過評測系統的檢測,但時間復雜度為O(n^3),因而有待改進
int
i,j,k,N;
//矩陣階數
int
a[11][11];
//N階矩陣
int
count=0;
//矩陣元素值,初始為0
scanf("%d",&N);
for(i=1;i<=2*N-1;i++){
//N階方陣有2*N-1條反對角線,依次遍歷之
if(i%2!=0){
//當對角線編號為奇數時,各元素按此對角線上的矩陣各元素下標之和從小到大的順序排列
for(j=1;j<=N;j++)
for(k=1;k<=N;k++){
if(j+k==i+1)
a[j][k]=++count;
//各元素的下標之和==對角線編號+1
}
}
else{
//當對角線編號為偶數時,各元素按此對角線上的矩陣各元素下標之和從大到小的順序排列
for(int
j=N;j>=1;j--)
for(int
k=N;k>=1;k--){
if(j+k==i+1)
a[j][k]=++count;
//各元素的下標之和==對角線編號+1
}
}
}
for(i=1;i<=N;i++)
for(j=1;j<=N;j++){
if(j!=N)
printf("%4d",a[i][j]);
else
printf("%4d\n",a[i][j]);
}
return
0;
}
❸ 蛇形填數 用c語言
#include <stdlib.h>
#include <stdio.h>
void main()
{
int a[21][21], i, j, n;
scanf("%d", &n);
for( i=0; i<n; i++)
for (j=0; j<n; j++)
a[i][j] = -1;
int value = 1, max = n*n;
i = 0, j=n-1;
int inci = 1, incj = 0;
int nexti, nextj;
while(value <= max){
a[i][j] = value ++;
//printf("i=%d, j=%d value=%d\n",i, j, value-1);
nexti = i + inci;
nextj = j + incj;
if( nexti>n-1 || nexti<0 || nextj>n-1 || nextj<0 ||
a[nexti][nextj] != -1) {
if(inci==1 && incj==0) {
inci= 0, incj=-1;
}
else if(inci==0 && incj==-1) {
inci= -1, incj=0;
}else if(inci==-1 && incj==0) {
inci = 0, incj=1;
}else {
inci = 1, incj=0;
}
nexti = i+inci;
nextj = j+incj;
}
i = nexti;
j = nextj;
}
for (i=0; i<n; i++) {
for(j=0; j<n; j++) printf("%3d ", a[i][j]);
printf("\n");
}
}
-------
5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
❹ C語言蛇形填充數組
按照你的要求編寫的蛇形填充數組的C語言程序如下
#include<stdio.h>
intmain()
{
inta[100][100];
inti,j,k,n,flag=0,data=1;
scanf("%d",&n);
for(k=0;k<2*n;k++){
if(flag==1){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==k-j){
a[i][j]=data++;
}
}
}
flag=0;
}else{
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==k-j){
a[j][i]=data++;
}
}
}
flag=1;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j==n-1)
printf("%d",a[i][j]);
else
printf("%d",a[i][j]);
}
printf(" ");
}
return0;
}
運行結果
4
1267
35813
491214
10111516
❺ 求蛇形方陣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語言蛇形矩陣生成代碼
#include<stdio.h>
void main()
{
int i,j,a[100][100],n,k;
printf(請輸入列數n= );
scanf(%d,&n);
k=1;
//輸出上三角
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{
if(i%2==0) a[i+1-j][j]=k;
else a[j][i+1-j]=k;
k++;
}
//輸出下三角
for(i=n+1;i<2*n;i++)
for(j=1;j<=2*n-i;j++)
{
if(i%2==0) a[n+1-j][i-n+j]=k; //n+1在這里是定值了
else a[i-n+j][n+1-j]=k;
k++;
}
for(i=1;i<=n;i++)
{
printf(
);
for(j=1;j<=n;j++)
printf(%4d,a[i][j]);
}
printf(
);
}
//上面作者所做的不包含0行和0列因此給出下面版本
#include<stdio.h>
//@Author 面壁者
int main()
{
int i,j,a[100][100],n,k;
printf(請輸入列數n= );
scanf(%d,&n);
k=1;
//輸出上三角
for(i=0; i<n; i++)
for(j=0; j<=i; j++)
{
if(i%2==0) a[i-j][j]=k;
else a[j][i-j]=k;
k++;
}
//輸出下三角
for(i=n; i<2*n; i++)
for(j=1; j<2*n-i; j++)
{
if(i%2==0) a[n-j][i-n+j]=k; //n+1在這里是定值了
else a[i-n+j][n-j]=k;
k++;
}
for(i=0; i<n; i++)
{
printf(
);
for(j=0; j<n; j++)
printf(%4d,a[i][j]);
}
printf(
);
return 0;
}
❼ c語言:建立N階蛇形方陣並輸出
用C語言輸出一個N階蛇形矩陣生成一個按蛇形方式排列自然數1、2、3、…N2
而在你的程序里並沒有察覺到這點而是直接輸出了
所以那裡就是0了
其他0
❽ 急求!C語言的蛇形方陣!
#include "conio.h"
#include <stdio.h>
#include <stdlib.h>
#define N 6
int mDir[4][2]={ {1,0},{-1,1},{0,1},{1,-1} }; //4個填充方向:左、左下、下、右上,順序填充
void StepOn(int x,int y,int s[N][N],int len)
{ int i,j,d=0,n=0,begin=1;
while ( 1 )
{ if ( s[y][x]==0 )
{ n++; s[y][x]=n;
if ( begin ) begin=0; //起始點不計
else if ( (d==0||d==2) ) d=(d+1)%4; //如果當前方向是左或下,立即轉向
}
else //不空
{ for ( i=0;i<4;i++ ) //順序測試4個方向
if ( x+mDir[(d+i)%4][0]<len && x+mDir[(d+i)%4][0]>=0 && y+mDir[(d+i)%4][1]<len
&& y+mDir[(d+i)%4][1]>=0 ) //不能超出數組范圍
if ( s[y+mDir[(d+i)%4][1]][x+mDir[(d+i)%4][0]]==0 ) //發現合法空位
{ d=(d+i)%4; x+=mDir[d][0]; y+=mDir[d][1]; break; } //修改當前坐標和行進方向
if ( i>=4 ) break; //4個方向都找不到空位,結束
}
}
}
void main()
{ int s[N][N]={0},i,j;
StepOn(0,0,s,N);
for ( i=0;i<N;i++ ) { for ( j=0;j<N;j++ ) printf("%2d ",s[i][j]); printf("\n"); }
getch();
}
本程序的設計思路是:保持當前填充方向,如果是行進方向上有空位則填充,如果越界或是垂直、水平方向填充或越界則立即轉向,直到所有方向均試過沒有空位為止。
程序中用(d+i)%4的方法使當前方向d的順序下幾個方向都得到測試。既保持了當前方向又能測試所有未測過的方向。