题目
输入第一行表示斐波那契数列的行数n;(行数即列数);
输出为斐波那契数列螺旋倒序输出(顺时针);
代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int a = 1,b = 1;
vector<int> shulie(int k)
{
vector<int> v;
v.push_back(a);
v.push_back(b);
for(int i = 2;i<k;i++)
{
v.push_back(v[i-1]+v[i-2]);
}
return v;
}
int main() {
int g;
cin >> g;
int k;
k = g * g;
int n = 1;
int m = k;
vector<int> res = shulie(k);
while (n <= sqrt(k)) {
if (k % n == 0) {
m = k / n;
}
n++;
}
n = k / m;
sort(res.begin(), res.end());
vector<vector<int> > b(m, vector<int>(n));
int count = k - 1;
int round = 0;
int i = 0;
int j = 0;
while (1) {
for (j = round; j < n - round; j++) {
b[i][j] = res[count];
count--;
}
if (count < 0) break;
j--;
for (i = round + 1; i < m - round; i++) {
b[i][j] = res[count];
count--;
}
if (count < 0) break;
i--;
for (j = n - round - 2; j >= round; j--) {
b[i][j] = res[count];
count--;
}
if (count < 0) break;
j++;
for (i = m - round - 2; i > round; i--) {
b[i][j] = res[count];
count--;
}
if (count < 0) break;
i++;
round++;
}
for (i = 0; i < m; i++) {
cout << b[i][0];
for (j = 1; j < n; j++) {
cout << " " << b[i][j];
}
cout << endl;
}
return 0;
}
运行结果:
螺旋矩阵实现:
参考:https://blog.csdn.net/zhang35/article/details/103830121?biz_id=102&utm_term=求m*n阶螺旋矩阵%20C++实现&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduweb~default-1-103830121&spm=1018.2118.3001.4187