蛇形填數 楊輝三角(基礎題)

蛇形填數

Description

在n*n方陣裏填入1,2,…,n*n,要求填成蛇形。例如n=4時方陣爲:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

Input

直接輸入方陣的維數,即n的值。(n<=100)

Output

輸出結果是蛇形方陣。

Sample Input

3

Sample Output

7 8 1
6 9 2
5 4 3

這道題比較簡單,是從右上角開始順時針地從外往內填數。
從右上角開始移動,直到碰到邊界或者碰到非0的元素,就改變方向。

#include <stdio.h>
#include <string.h>
using namespace std; 

int main(void)
{
	int n,sum=0;
	int arr[105][105];
	scanf("%d",&n);
	int x=0,y=n-1;//行列 
	memset(arr,0,sizeof(arr));
	arr[x][y]=++sum;//填入1
	while(sum<n*n)
	{
		//沒有超出矩陣的範圍,且元素爲0時 
		while(x+1<n&&!arr[x+1][y])//向下移動 
			arr[++x][y]=++sum;
		while(y-1>=0&&!arr[x][y-1])//向左移動 
			arr[x][--y]=++sum;
		while(x-1>=0&&!arr[x-1][y])//向上移動 
			arr[--x][y]=++sum;
		while(y+1<n&&!arr[x][y+1])//向右移動   
			arr[x][++y]=++sum;             
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			printf("%d ",arr[i][j]);
		printf("\n");
	}
	return 0;
}

蛇形矩陣

題目描述

yyf玩一個數字遊戲,取個n行n列數字矩陣(其中n爲不超過100的奇數),數字的填補方法爲:在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和.

輸入描述

n(即n行n列)

輸出描述

n+1行,n行爲組成的矩陣,最後一行爲對角線數字之和

樣例輸入

3

樣例輸出

5 4 3
6 1 2
7 8 9
25

這道題是逆時針地從內往外填數。
可以看出的規律是:先向右移動一格,向上移動一格。向左兩格,向下兩格。向右三格,向上三格…
從起點開始移動,先移動兩次一格,再移動兩次兩格,再移動兩次三格,再移動兩次四格…

#include <stdio.h>
#include <string.h>
using namespace std; 

int main(void)
{
	int n,sum=0,ans=0;
	int num=1,t=num;
	int arr[105][105];
	scanf("%d",&n);
	int x=n/2,y=n/2;//行列 
	memset(arr,0,sizeof(arr));
	arr[x][y]=++sum;//填入1
	while(sum<n*n)
	{
		//沒有超出矩陣的範圍,且元素爲0時 
		while(y+1<n&&!arr[x][y+1]&&t--)//向右移動   
			arr[x][++y]=++sum;
		t=num;    
		while(x-1>=0&&!arr[x-1][y]&&t--)//向上移動 
			arr[--x][y]=++sum;
		t=++num;
		while(y-1>=0&&!arr[x][y-1]&&t--)//向左移動 
			arr[x][--y]=++sum;
		t=num;
		while(x+1<n&&!arr[x+1][y]&&t--)//向下移動 
			arr[++x][y]=++sum;
		t=++num;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n-1;j++)
			printf("%d ",arr[i][j]);
		printf("%d\n",arr[i][n-1]);
	}
	for(int i=0;i<n;i++)
	{
		if(i==n/2)
			ans++;
		else
			ans+=arr[i][n/2]*2;
	}
	printf("%d\n",ans);
	return 0;
}

楊輝三角

Description

還記得中學時候學過的楊輝三角嗎?具體的定義這裏不再描述,你可以參考以下的圖形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

Input

輸入數據包含多個測試實例,每個測試實例的輸入只包含一個正整數n(1<=n<=30),表示將要輸出的楊輝三角的層數。

Output

對應於每一個輸入,請輸出相應層數的楊輝三角,每一層的整數之間用一個空格隔開,每一個楊輝三角後面加一個空行。

Sample Input

2
3

Sample Output

1
1 1

1
1 1
1 2 1

#include<stdio.h>

int main(void)
{
	int n,arr[35][35];
	for(int i=1;i<=30;i++)
	{
		for(int j=1;j<=i;j++)
		{
			//如果是第一個數或最後一個數 
			if(j==1||j==i)
				arr[i][j]=1;
			else
				arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
		}
	}
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<i;j++)
				printf("%d ",arr[i][j]);
			//輸出每行的最後一個數 
			printf("%d\n",arr[i][i]);
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章