1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣(遞迴)
題目:1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣,如下:
輸入數字2,則程式輸出:
1 2
4 3
輸入數字3,則程式輸出:
1 2 3
8 9 4
7 6 5
輸入數字4, 則程式輸出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
此題我的解題方法是遞迴,遞迴函式的作用就是列印當前圈,然後通過遞迴呼叫逐層列印內層,直到列印結束。程式相對比較簡單,所以就不加註釋了……
#include <iostream> #include <string> using namespace std; void fuck(int a[][21],int num,int start_position,int n){ int i,x,y; if(n==0)return; if(n==1){ a[start_position][start_position]=num; return ; } x=y=start_position; a[x][y]=num; for(i=0;i<n-1;++i){ ++y; a[x][y]=num; num++; } for(i=0;i<n-1;++i){ ++x; a[x][y]=num; num++; } for(i=0;i<n-1;++i){ --y; a[x][y]=num; num++; } for(i=0;i<n-2;++i){ --x; a[x][y]=num; num++; } fuck(a,num,start_position+1,n-2); } int main(){ int n; int a[21][21]; cin>>n; fuck(a,1,0,n); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cout<<a[i][j]<<"\t"; } cout<<endl; } return 0; }
當然也可以轉化為非遞迴式,這樣,只要把遞迴寫成圈數的迴圈即可。
相關推薦
1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣(遞迴)
題目:1,2,3…n*n 的數字按照順時針螺旋的形式列印成矩陣,如下: 輸入數字2,則程式輸出: 1 2 4 3 輸入數字3,則程式輸出: 1 2 3 8 9 4 7 6 5 輸入數字4, 則程式輸出
輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m 轉載
輸出 -1 pri str spa private 組合 開始 () 題目:編程求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 分析:分治的思想。可以把問題(m,n)拆分(m - n, n -1)和(m, n -
jzxx1570 1!+2!+3!+……+N!
題目描述 用高精度計算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示階乘,例如:5!=54321。 輸入 一行,一個正整數N。 輸出 一行,一個正整數,即結果S。 樣例輸入 5 樣例輸出 153 滿分程式碼: #include<stdio
jzxx1570 1!+2!+3!+……+N!
題目描述 用高精度計算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示階乘,例如:5!=54321。 輸入 一行,一個正整數N。 輸出 一行,一個正整數,即結果S。 樣例輸入 5 樣例輸出 153 滿分程式碼: #include<stdio.h
遞迴2 用遞迴求和。1+2+3+4+....n.
問題及程式碼: 2711: 用遞迴求和。1+2+3+4+....n. Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1553 Solved: 10
程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來(揹包問題求解) .
程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。實際上就是一個揹包問題。 求解思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.將最大數n加入且n == m,則
【 51NOD 1434 素數篩 】【數論+思維+篩素數】區間LCM【找到一個最小整數M,滿足M>N,LCM(N+1,N+2,..,M-1,M)是LCM(1,2,3,4,.,N-1,N) 的倍數】
思路: 雖然是四級題,但是思路還是不太清晰,找網上題解講的很多不是特別清晰(可以隨便舉些例子理解一下) 首先可以得出一個性質:LCM(1,2,3,4,...,N-1,N) 中質因子k的出現的次數為t
1+2+3+4+……+n的和
#include <stdio.h> main() { int i,n,sum; printf("input,n:"); scanf("%d",&n); sum=0; for (i=1;i<
CF D - Beautiful Graph(dfs 染色問題吧)給你一個圖,每個節點可以賦值1,2,3三種數字,相鄰的節點的和必須是奇數,問有多少中方法。
題意: 給你一個圖,每個節點可以賦值1,2,3三種數字,相鄰的節點的和必須是奇數,問有多少中方法。 分析: 很容易就可以發現如果這個圖中是有奇數的環的話,那這是肯定不行的 ,否則這個環的貢獻是為2^sumji+2^sumou , 總貢獻為每個的環的貢獻相乘,一個點也為環; #in
有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數 都是多少
題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 解:程式分
N皇后問題(遞迴)
//八皇后遞迴解法 //#include<iostream> //using namespace std; #include<stdio.h> int queen[9] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; int count = 0;//定義一個全
2.3 如何得到真實的執行計劃 《基於Oracle的優化(學習筆記)》
if( hash_values.count > 0 ) then for i in hash_values.first .. hash_values.last loop dbms_output.put_line('----------------------------
演算法-N皇后(遞迴)
package MOOC; /** * 輸入整數n,要求n個國際皇后,擺在n*n的棋盤上,使其互相不能攻擊(不在同一行列對角線上),輸出全部方案 */ import java.util.Scann
Leetcode 129 求根到葉子節點數字之和(遞迴)
給定一個二叉樹,它的每個結點都存放一個 0-9 的數字,每條從根到葉子節點的路徑都代表一個數字。 例如,從根到葉子節點路徑 1->2->3 代表數字 123。 計算從根到葉子節點生成的所有數字之和。 說明: 葉子節點是指沒有子節點的節點。 示
【動態規劃】數字三角形最大值(一)(遞迴)
題目:數字三角形,形如 3 3 2 4 5 1 1 3 4 1 每個點只能選擇向左或向右走,取一條路徑,使得路徑上數字和最大。 無需求出路徑,求出最大值。 輸入n,和 n 行數字三角形 n<
字元(數字)倒序輸出(遞迴)
不含空格版#include<stdio.h> void fun(char *p) { if(*p=='\0') return; fun(p+1); printf("%c",*p)
藍橋杯演算法訓練——2的次冪表示 (遞迴)
問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3
《資料結構與演算法——C語言描述》答案 3.11 查詢單鏈表中的特定元素(遞迴)
轉載請註明出處:http://blog.csdn.net/xdz78 #include <stdio.h> #include <stdlib.h> //查詢單鏈表中的特定元
2的次冪表示 (遞迴)
思路:這遞迴遞的我頭都暈了,先貼個偽遞迴吧 AC程式碼: #include <cstdio> #include <cstring> #include <algor
練習2-18 求組合數(遞迴)
本題要求編寫程式,根據公式Cnm = n! / m!(n−m)!算出從n個不同元素中取出m個元素(m≤n)的組合數。 建議定義和呼叫函式fact(n)計算n!,其中n的型別是int,函式型別是double。 輸入格式: 輸入在一行中給出兩個正整數m和n