CSP考試 2015年3月第1題 圖像旋轉 C語言實現

題目分析:

該題是對一個輸入的矩陣逆時針旋轉之後求得到的矩陣,對於矩陣想到可以使用二維數組,但是這裏的題目要求則不能使用數組天然的位序,(關於數組天然位序的應用,可以查看我的博客:https://blog.csdn.net/AIMINdeCSDN/article/details/103347659) ,那麼關鍵就在於對二維數組的構造,以及旋轉操作,分析逆時針旋轉可以發現,行序變列序,也就是說,第一行在實際輸出時需要按第一列輸出,但是問題在於第一列他不能直接輸出,所以可以從行數末尾從後往前輸出,先減小行數再減小列數,使用二重循環來實現。

C語言源程序:

#include<stdio.h> 

int main()
{
	int m,n,i,j,v;
	scanf("%d%d",&m,&n);
	short num[m][n];	
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%hd",&v);
			num[i][j]=v;
		}
	}
         //先減小行數在減小列數
	while(j--)
	{
            //行數要從前往後
		for(i=0;i<m;i++)
		{
			printf("%hd ",num[i][j]);
		}
		printf("\n");
	}
	return 0;
}

在上述程序中,對於數組的定義是可以直接將scanf賦值後的變量作爲聲明的,還可以直接在定義數組前將並阿聯複製也是一樣的效果,下面時用define定義的最大數組長度,但是當我使用int定義數組變量時發現,C語言中不能容納1000*1000的int型數組,隨後我又改爲short型才正確通過。

#include<stdio.h> 
#define N 1000
int mmain()
{
	int m,n,i,j,v;
    //數組類型需要改爲short型
	short num[N][N];
	scanf("%d%d",&m,&n);
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%hd",&v);
			num[i][j]=v;
		}
	}
	while(j--)
	{
		for(i=0;i<m;i++)
		{
			printf("%hd ",num[i][j]);
		}
		printf("\n");
	}
	return 0;
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章