当前位置:首页 » 编程语言 » c语言逆时针蛇形矩阵代码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言逆时针蛇形矩阵代码

发布时间: 2022-09-13 21:31:45

1. 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;
}

2. 求个C语言蛇形矩阵源代码,有解题思路更好


/********************************************************************************
给一个由英文大写字母组成的字符串,串长为n*n(0<n<11),请将这个按Z字形排列输出这个字符方阵。

比如:ABCDEFGHI,Z字形排成一个3*3的方阵如下:
ABF
CEG
DHI
输入
每行一个字符串。
输出
输出对应矩阵,每个矩阵之后有一个空行。
SampleInput

ABCDEFGHI
AAAABBBBCCCCDDDD

SampleOutput

ABF
CEG
DHI

AABB
ABBD
ACCD
CCDD
********************************************************************************/
#include<stdio.h>
#include<string.h>
#defineN11
inti,j;
intk;
intln;
intn;
chars[N*N];
chara[N][N];
voidgo_right(){
j++;
}
voidgo_left(){
j--;
}
voidgo_down(){
i++;
}
voidgo_up(){
i--;
};
voidleft_down(){
go_left();
go_down();
}
voidright_up(){
go_right();
go_up();
}
voidgo(){
while(1){
if(j+1<n){
go_right();a[i][j]=s[k];k++;//右移
if(k==ln+1)return;
}
else{
go_down();a[i][j]=s[k];k++;
if(k==ln+1)return;
}

while(1){//左下移动
left_down();
if(j>=0&&i<n){
a[i][j]=s[k];k++;
if(k==ln+1)return;
}
elsebreak;
}
j++;i--;//还原一步

if(i+1<n){
go_down();a[i][j]=s[k];k++;//向下
if(k==ln+1)return;
}
else{
go_right();a[i][j]=s[k];k++;//右移
if(k==ln+1)return;
}

while(1){//右上移动
right_up();
if(i>=0&&j<n){
a[i][j]=s[k];k++;
if(k==ln+1)return;
}
elsebreak;
}
i++;j--;//还原一步
}
}
voidprint(){
i=j=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%c",a[i][j]);
printf(" ");
}
}
voidZ(chars[]){
ln=strlen(s);
n=(int)sqrt(ln);
k=0;
i=j=0;
a[i][j]=s[k];k++;
go();
print();
return;
}
intmain(){
while(scanf("%s",s)!=EOF){
Z(s);
}
return0;
}

以前写的,非常类似。希望能帮助到你。

3. 用c语言输出蛇形矩阵,我是新手,自己乱想了一个,觉得应该是对的,但输不出,求纠正!!!

其实蛇形数组是有规律可寻的只要2个循环就可以。
蛇形数组你可以看做是一个个正方形做成的,而没有一个正方形又有四个边。
所以第一个循环控制正方形的个数,在第一个循环里面就是第二个循环了,这个就是对应四个边了,所以就有四个小的循环,这样就可以模拟蛇形数组了。
下面给你写写我的代码:
#include <stdio.h>

#define MAX 10

int a[MAX][MAX];

int main() //既然你这里写的是int main,那么你在最后就必须要加上一个return 0;
{
int i,j,n,t;

n = (MAX+1)/2;
t = 0;

for (i=0; i<n; i++)//第一个循环控制个数
{
for(j=i; j<MAX-i-1; j++)//上行
{
t++;
a[i][j] = t;
}

for(j=i; j<MAX-i-1; j++)//右列
{
t++;
a[j][MAX-i-1] = t;
}

for(j=MAX-i-1; j>i; j--)//下行
{
t++;
a[MAX-i-1][j] = t;
}

for(j=MAX-i-1; j>i; j--)//左列
{
t++;
a[j][i] = t;
}
}

for (i=0; i<MAX; i++)
{
for (j=0;j<MAX;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}

4. 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;
}

你测试下,看对不对?

5. 用C语言写一个如下示例格式的蛇形矩阵,程序还有问题,怎么把它完善有图。

你的C语言蛇形矩阵的程序,只需要改两处就没有问题了.

完整的蛇形矩阵程序如下(改动的地方见注释)

#include<stdio.h>
voidmain()
{
intn;
printf("请输入蛇形矩阵的行数n(n≤100): ");
scanf("%d",&n);
inta[100][100]={0},i,j,k,l,m;
for(i=0,j=0,l=1;j<n;j++,l++)
a[i][j]=l*(l+1)/2;
for(i=1,j=0,k=2;i<n;k++,i++)
a[i][j]=(k*k-k+2)/2;
for(i=1,k=1,m=3;i<n-1;i++,k++,m++)//这里把i<n-k;改成i<n-1;
{
for(j=1;j<n-k;j++)
{
if(j==1)
{a[i][j]=a[i][0]+m;continue;}
a[i][j]=a[i][j-1]+m+(j-1);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//这里把j<n;改成j<n-i;
{
if(a[i][j]==0)
a[i][j]=' ';
printf("%d",a[i][j]);}
printf(" ");
}
}

运行结果

6. 用C语言输出一个N阶蛇形矩阵(随意输出n*n个数之后,不要从1开始的,是自己任意输出的n*n个数)。

#include <stdlib.h>
#include <stdio.h>
#include <time.h> /*用到了time函数,所以要有这个头文件*/

int main( void)
{
int i,j,MAX;
int number[400][400] = {0};
printf("请输入一个整数:\n");
scanf("%d",&MAX);
srand((unsigned) time(NULL)); /*播种子*/
for(i = 0; i < MAX; i++)
{
for (j=0;j<MAX;j++)
{
number[i][j] = rand() % 1000; /*产生1000以内的随机整数*/
printf("%5d ", number[i][j]);
}
printf("\n");
}
return 0;
}

这个是随机产生矩阵的值,注意输入的N 请不要超过400......有问题可以MM我,

7. 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;
}

8. 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(" ");
}

}

9. 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

10. 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;
}