程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> NYOJ_33 蛇形填數(蛇形矩陣)

NYOJ_33 蛇形填數(蛇形矩陣)

編輯:關於C++

 

分析:

本題重點是分析矩陣。一開始看錯了蛇,得到另一個矩陣。見附錄一。

矩陣:

7 8 1

6 9 2

5 4 3

本文思路在於,先求最外層矩陣,再求內層矩陣。

最外層矩陣又可以分解成四個相似的子問題。

按照舉例的矩陣來看:即 1 2、3 4、5 6、7 8。

問題引刃而解。

不過我花了很多時間,大概兩個小時,因為一開始的代碼沒有現在的簡潔。

用 i 來代表賦值的次數,可以大幅度減少思維量和代碼量。

(官方給的最優代碼容易想到,但是不容易表達)

 

 

#include
using namespace std;
#define maxSize 100
int center=0;
int a[maxSize][maxSize];
int element=1;
void outArray(int c1,int c2)  //center
{
	if(c1==c2) a[c1][c2]=element; //最後一次賦值 
	int i=-1; 
	while(++i<c2-c1) cin="" i="-1;" "="" int="">>n;
	while(center<=n-1-center)
	{
		outArray(center,n-1-center);
		center++;
	}
	for(int i=0;i

附錄一:

 

另一種蛇。

 

/*
/擴展的蛇形方陣
 	7 6 1
	8 5 2
	9 4 3*/
#include
using namespace stdl
#define maxSize 100
int main()
{
	int n;
	cin>>n;
	int a[maxSize][maxSize];
	int i=0;        //行號
	int element=1; 
	
	

	 
	for (int j=n-1;j>=0;j--) //列號 
	{
		if(i==0)        //0 - n-1     
		{
			for(;i=0;i--)//while(--i>=0)
				a[i][j]=element++;
			i++;              //i為0 
		}

	}
	for(int i=0;i

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved