环形矩阵与蛇形矩阵的输出- c语言

目录

环形矩阵

蛇形矩阵


环形矩阵

 

输入,一个n,一个m,代表行和列

输出,一个n行m列的从1开始到n*m结束的矩阵

#include<stdio.h>
int main()
{
	int i,j,k,n,m,a;
	int num[20][20]={0},l,h;

	scanf("%d %d",&n,&m);//行 列  
	
	i=j=k=0;
	a=1;//从1开始填充 
	 
	h=n;
	l=m;
	while(a <= l*h)//当数据大于h*l时结束 
	{
		
		for(j=k;j<m;j++)//行号 i 不变,列号j自加
		{
			if(num[i][j]==0)
			num[i][j]=a;	
			a++;
		}
   		j--;//j与a都多加了一次,这里减去 
   		a--;
		for(i=k;i<n;i++)//行++,列不变 
		{
			if(num[i][j]==0)
			num[i][j]=a;
			a++;
		}
		i--;//j与a都多加了一次,这里减去 
		a--;
		
		for(j=m-1;j>k;j--)//列-- 行不变 
		{
			 if(num[i][j]==0)
			num[i][j]=a;
			a++;
		}
	   
		for(i=n-1;i>k;i--)//行-- 列不变 
		{
		    if(num[i][j]==0)	
			num[i][j]=a;
			a++;
     	}
        i++;//i多减了一次;
		  
		n--;//下,右边界减一,圈数加一,缩小范围 
		m--;
		k++;
	}
	for(i=0;i<h;i++)//打印出已经填充好的数据 
	{
			for(j=0;j<l;j++)
				printf("%-3d ",num[i][j]);
				printf("\n");
	}
	return 0;
}

蛇形矩阵

 

输入一个n;

输出一个n阶的蛇形矩阵

#include<stdio.h>
int main()
{
	int i,j,k,n,a=1;  //行  
	int data [100][100];  
	i=j=k=0; //k:运动方向 
	data[0][0] = 1;  
	printf("Input n:\n");
	scanf("%d",&n);
	while( data[i][j]!=n*n)//最后一个为n*n时结束 
	{  
	   switch(k)
	   {
	   	case 0://向右列++ 
		   {	
		    data[i][++j] = ++a; 
			k=(i == n-1)?3:1; //到最后一行右上否则左下 
			break;
		   }
		case 1://向左下 行++,列-- 
			{
			data[++i][--j] = ++a;  
			   
			if(i==n-1)       k = 0; //到最后一行向右 或者 到第一列向下,否则继续 	  			 
			else if(j == 0 ) k = 2; 				 
			break;
			}
		case 2://向下 行++ 
			{
			data[++i][j] =++a;
			k=(j == n-1)?1:3;//到最后一列向左下否则右上  
			break;
			}
		case 3://右上行--,列++ 
			{
			data[--i][++j] = ++a;
			if(j == n-1)     k = 2;  //到最后一列向下 或者 到第一行向右,否则 继续 
			else if( i == 0) k = 0;  
			break;
	    	}
		} 
	}   
	
	for(i=0;i<n;i++)//打印矩阵 
	{
		for(j=0;j<n;j++)
		printf("%-4d",data[i][j]);
		printf("\n");  
	}
}
	

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值