79 阵列

79 阵列

作者: 孙辞海 时间限制: 10S章节: 二维数组

问题描述 :

明明在上学的时候,参加数学兴趣班。在班上,老师介绍了一种非常有趣的阵列。

该阵列由n个正整数构成,阵列中的数字从1开始递增,数字的排序规则是从1开始由中间逆时针向外转出,2出现在1的下面,然后直至输出n为止。

例如当n=5的时候,阵列如下:

5

1 4

2 3

当n=9时,阵列如下:

7 6 5

8 1 4

9 2 3

当n=10时,阵列如下:

7 6 5

8 1 4

9 2 3

10

明明回家后想自己动手构造这样的阵列。他从n=1开始构造,但是他发现当n越来越大时,阵列的复杂性就越高,然后构造出来的阵列就越容易出错。为了降低构造阵列的出错率,提高构造速度,明明就求助于你,请你帮他写一个程序,来构造这样的阵列。

明明的问题可以归结为:给你一个正整数n,请你按题目描述中所述的方法,构造出阵列。

输入说明 :

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅有一个正整数n(1≤n≤99),即所要构造的阵列的大小。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个大小为n的阵列,阵列中的数字用一个空格隔开,具体形式请参考输出样例: 当n为个位数时,输出的每个数占1位,当n为两位数时,两位数所在的列输出的每个数占2位(不足2位的左边补空格)。 每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果之后没有任何空行。 注:通常,显示屏为标准输出设备。

输入范例 :

5
45
10

输出范例 :

5
1 4
2 3

43 42 41 40 39 38 37
44 21 20 19 18 17 36
45 22 7 6 5 16 35
23 8 1 4 15 34
24 9 2 3 14 33
25 10 11 12 13 32
26 27 28 29 30 31

7 6 5
8 1 4
9 2 3
10
从上到下 从左到右 从下到上 从右到左输出 相应更新矩阵位置
但我不知道为什么我的格式不对 有大佬解答吗?

#include<stdio.h>
#include<string.h>
int main()
{
	int n;
	int a[11][11],d=1;
	while(scanf("%d",&n)!=EOF)
	{
		memset(a,0,sizeof(a));
		int count=0,c=0,maxi=5,mini=5,minj=5,maxj=5;
		while(count!=n)
		{
			for(int i=5-c;i<=6+c;i++)
			{
				if(count==n)
				break;
				if(i>maxi)
				maxi=i;//更新最大i 
				if(5-c<minj)
				minj=5-c;//更新最小i 
				if(i)
				a[i][5-c]=++count;//向下走	
			}  
			for(int j=6-c;j<=6+c;j++)
			{
				if(count==n)
				break;
				if(j>maxj)
				maxj=j;//更新最大j 
				a[6+c][j]=++count;//向右走 
			}   
			for(int i=5+c;i>=4-c;i--)
			{
				if(count==n)
				break;
				if(i<mini)
				mini=i;//更新最小i 
				a[i][6+c]=++count;//向上走 
				
			}
			for(int j=5+c;j>=5-c;j--)
			{
				if(count==n)
				break;
				a[4-c][j]=++count;//向左走 
			} 
			c++;  
		}
		if(d++!=1) printf("\n");
		if(n<10)
		{
			for(int i=mini;i<=maxi;i++)
		{
			for(int j=minj;j<=maxj;j++)
		    {
		    	if(j!=minj)
		    	printf(" ");
		    	if(a[i][j]==0)
		    	printf(" ");
		    	else
		    	printf("%d",a[i][j]);	
		    }
		    printf("\n");
		}
		}
		else
		{
			for(int i=mini;i<=maxi;i++)
		{
			for(int j=minj;j<=maxj;j++)
		    {
		    	if(j!=minj)
		    	printf(" ");
		    	if(a[i][j]==0)
		    	printf("  ");
		    	if(a[i][j]<10&&a[i][j]>0)
		    	printf("%2d",a[i][j]);
		    	if(a[i][j]>=10)
		    	printf("%d",a[i][j]);	
		    }
		    printf("\n");
		}
		}
		
		
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab小孔阵列是一种用于信号处理和通信系统的重要工具。它由多个小孔组成,每个小孔都可以接收或发射信号。这些小孔之间的距离和相位差可以被调整,以实现对信号的波束形成、方向估计和空间滤波等功能。 在Matlab中,可以使用数组和矩阵操作来模拟和分析小孔阵列。以下是一些常见的步骤和函数: 1. 定义阵列几何:可以使用矩阵来表示小孔阵列的位置和方向。例如,可以使用二维矩阵表示线性阵列的位置,或者使用三维矩阵表示平面阵列的位置。 2. 计算波束权重:根据所需的波束形成特性,可以计算每个小孔的权重。常见的方法包括最小均方误差(MMSE)准则、最大信噪比(SNR)准则等。 3. 生成接收信号:可以使用Matlab中的信号生成函数来生成接收到的信号。例如,可以生成具有不同入射角度和干扰的信号。 4. 波束形成:根据小孔阵列的几何和权重,可以通过将接收信号与权重进行加权求和来实现波束形成。这可以通过矩阵乘法和求和操作来实现。 5. 方向估计:可以使用小孔阵列接收到的信号来估计信号的入射角度。常见的方法包括最大似然估计(MLE)、最小二乘法(LS)等。 6. 空间滤波:可以使用小孔阵列的几何和权重来实现空间滤波,以抑制干扰或增强感兴趣的信号。 以上是Matlab中使用小孔阵列进行信号处理和通信系统分析的一般步骤。具体的实现方法和函数可以根据具体的需求和应用进行选择和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值