蛇形矩阵c语言
① 用c语言输出一个N阶蛇形矩阵
思路有点乱,不过也算是比较好的完成要求了~
#include <stdio.h>
int main()
{
int n;
puts("please enter n:");
scanf("%d",&n);
for(int i=0;i<=n-1;i++)
{
static int rowHead = 1,up =0;
rowHead += i;
printf("%d\t",rowHead);
for(int j=1,num = rowHead;j<n-i;j++)
{
num += j+1+up;
printf("%d\t",num);
}
printf("\n");
up++;
}
return 0;
}
② c语言蛇形矩阵的变型
// Snake.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int** array = NULL;
int row;
cin>>row;
int col = row;
array = new int*[row];
for (int i = 0; i < row; i++)
{
[i] = new int[row - i];
}
for (int i = 0; i < row; i++)
{
int add = i;
for ( int j = 0; j < col - i; j++)
{
if (j == 0 && i == 0)
{
array[0][0] = 1;
}
else
{
if ( j > 0)
{
array[i][j] = array[i][j - 1] + add;
}
else
{
if (i > 0)
{
array[i][j] = array[i - 1][1] + 1;
}
}
}
add++;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < row - i; j++)
{
if (array[i][j] < 10)
{
cout<<array[i][j]<<" "<<" ";
}
else
{
cout<<array[i][j]<<" ";
}
}
cout<<endl;
}
return 0;
}
③ 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语言 蛇形矩阵源程序写法
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(" ");
}
}
⑤ 蛇形矩阵的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语言蛇形矩阵代码
啥叫“蛇形矩阵”?是下面这个吗?不是请版说明一下权。
#include"stdio.h"
#defineN6
intmain(void){
chara[N][N],i,j,k;
for(k=1,i=0;i<6;i++)
if(i&1)
for(j=5;j>=0;a[i][j--]=k++);
else
for(j=0;j<6;a[i][j++]=k++);
for(i=0;i<6;i++){
for(j=0;j<6;printf("%3d",a[i][j++]));
printf(" ");
}
return0;
}
⑦ 求C语言蛇形矩阵
#include<stdio.h>
#define N 20
main()
{
int a[N][N]={0};
int t,j,k,l,m,n,i;
printf("请输入矩阵的大回小答:\n");
scanf("%d",&t);l=t;
for(j=0;j<t;j++)
{
m=j+1;n=j;
for(k=0;k<l;k++)
{
if(k>0)
a[j][k]=a[j][k-1]+m;
else if(j>0) a[j][k]=a[j-1][k]+n;
else a[j][k]=1;
m++;
printf("%4d",a[j][k]);
}
l--;
printf("\n");
}
}
⑧ 用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;
}
http://ke..com/view/1734081.htm
⑨ 用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>
intmain()
{
intn;
staticinta[100][100];
inti=0,j=0;
intk,x,y;
//printf("请输入整数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;
}
你测试下,看对不对?