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

NYOJ---蛇形填數(方塊填數+三角填數)

編輯:C++入門知識

蛇形填數

時間限制:3000 ms | 內存限制:65535 KB 難度:3
描述
在n*n方陳裡填入1,2,...,n*n,要求填成蛇形。例如n=4時方陳為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
輸入
直接輸入方陳的維數,即n的值。(n<=100)
輸出
輸出結果是蛇形方陳。
樣例輸入
3
樣例輸出
7 8 1
6 9 2
5 4 3
來源

算法經典

解析:個人認為是道比較經典的模擬題,很考察基本功,今天又拿來做了一下,方法就是模擬每個方向的坐標變化即可,順便推薦本書,感覺劉汝佳的《算法競賽入門經典》很適合入門的人來看哈!

貼一下自己的代碼

#include 
using std::endl;
using std::cin;
using std::cout;
const int MAXN = 100 +10;
int data[MAXN][MAXN];
int main()
{
#ifdef LOCAL
	freopen("input.txt" , "r" , stdin);
	freopen("output.txt" , "w" , stdout);
#endif
	int n;
	while(cin >> n)
	{
		memset(data,0,sizeof(data));
		int x=0 , y = n-1 , cnt = 1;
		data[x][y] = cnt;
		while(cnt < n*n)
		{
			//向下走
			while(x+1=0 && !data[x][y-1])
			{
				data[x][--y] = ++cnt;
			}
			//向上走
			while(x-1 >=0 && !data[x-1][y])
			{
				data[--x][y] = ++cnt;
			}
			//向右走
			while(y+1 

蛇形填數(二)

時間限制:2000 ms | 內存限制:65535 KB 難度:3
描述
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9
跟蛇形填數一樣,只是填數要求按照三角形填。注意每組數據之間用空行隔開
輸入
第一行有一個N,表示N組測試數據
接下來每組數據包括一個數字X,表示三角形的邊長,0< X <1000
輸出
輸出之後填好之後的圖
樣例輸入
2
5
4
樣例輸出
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9

1  2  3  4
9  10 5
8  6
7
來源
NBOJ

解析:蛇形填數的變形,三角填數,本質還是模擬數字填充的方法即可哈!

貼一下自己的代碼

#include 
#include 
using std::endl;
using std::cin;
using std::cout;
const int MAXN = 1000 + 10;
int data[MAXN][MAXN];
int main()
{
	int n;
#ifdef LOCAL
	freopen("input.txt" , "r" , stdin);
	freopen("output.txt" , "w" , stdout);
#endif
	cin >> n;
	while(n--)
	{
		memset(data , 0 , sizeof(data));
		int length;
		cin >> length;
		int x=0 , y=0 , cnt = 1;
		data[x][y] = cnt;
		while(cnt < ((length+1)*length)/2)
		{
			//向右走
			while(y+1 < length-x && !data[x][y+1])
			{
				data[x][++y] = ++cnt;
			}
			//向對角線走
			while(x+1 < length && y-1>=0 && !data[x+1][y-1])
			{
				data[++x][--y] = ++cnt;
			}
			//向上走
			while(x-1>=0 && !data[x-1][y])
			{
				data[--x][y] = ++cnt;
			}
		}
		//輸出
		for(int i=0; i

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