1050 螺旋矩陣 (25 分

本題要求將給定的?N?個正整數按非遞增的順序,填入“螺旋矩陣”。所謂“螺旋矩陣”,是指從左上角第 1 個格子開始,按順時針螺旋方向填充。要求矩陣的規模為?m?行?n?列,滿足條件:m×n?等于?N;mn;且?m?n?取所有可能值中的最小值。

輸入格式:

輸入在第 1 行中給出一個正整數?N,第 2 行給出?N?個待填充的正整數。所有數字不超過?1,相鄰數字以空格分隔。

輸出格式:

輸出螺旋矩陣。每行?n?個數字,共?m?行。相鄰數字以 1 個空格分隔,行末不得有多余空格。

輸入樣例:

12
37 76 20 98 76 42 53 95 60 81 58 93

輸出樣例:

98 95 93
42 37 81
53 20 76
58 60 76
//甲級的可以通過,乙級的最后一個測試點沒有通過
//運行時間問題,哪里的時間復雜度還可以在優化 
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 10010;
int matrix[maxn][maxn],A[maxn];
bool cmp(int a,int b){return a > b;
}int main(){int N;scanf("%d",&N);for(int i = 0; i < N; i++){scanf("%d",&A[i]);}sort(A,A+N,cmp);if(N == 1){printf("%d",A[0]);return 0;}int m = (int)ceil(sqrt(1.0*N));while(N % m != 0) m++;int n = N/m,i = 1,j = 1,now = 0; //m is line,n is columnint U = 1,D = m,L = 1,R = n;while(now < N){while(now < N && j < R){ //forward to rightmatrix[i][j] = A[now++];j++;}while(now < N && i < D){matrix[i][j] = A[now++]; //to downi++;}while(now < N && j > L){  //forward to downmatrix[i][j] = A[now++];j--;}while(now < N && i > U){        //forward to leftmatrix[i][j] = A[now++];i--;}U++;D--;L++;R--;i++;j++;if(now == N - 1) matrix[i][j] = A[now++];}for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++){printf("%d",matrix[i][j]);if(j < n) printf(" ");else printf("\n");}}return 0;
} 
//網上的代碼,暫留
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
int n;
void solve(){int a[n];for(int i=0;i<n;i++){scanf("%d",&a[i]);}sort(a,a+n);int x=sqrt(n),m;while(n%x){x--;}m=n/x;int t[m][x];for(int side=0,k=n-1;side*2<x;side++){for(int j=side;j<x-side;j++){t[side][j]=a[k--];}for(int i=side+1;i<m-side;i++){t[i][x-1-side]=a[k--];}for(int j=x-2-side;j>=side;j--){t[m-1-side][j]=a[k--];}if(x-1-side>side){for(int i=m-2-side;i>=side+1;i--){t[i][side]=a[k--];}}}for(int i=0;i<m;i++){for(int j=0;j<x;j++){printf("%d",t[i][j]);if(j+1<x){printf(" ");}}printf("\n");}
}
int main(){scanf("%d",&n);solve();return 0;
}

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/10381031.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385214.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Leetcode | 11】268. 缺失數字

給定一個包含 0, 1, 2, ..., n 中 n 個數的序列&#xff0c;找出 0 .. n 中沒有出現在序列中的那個數。 示例 1: 輸入: [3,0,1] 輸出: 2 示例 2: 輸入: [9,6,4,2,3,5,7,0,1] 輸出: 8 說明: 你的算法應具有線性時間復雜度。你能否僅使用額外常數空間來實現? class Solution { p…

1053 住房空置率 (20 分)

在不打擾居民的前提下&#xff0c;統計住房空置率的一種方法是根據每戶用電量的連續變化規律進行判斷。判斷方法如下&#xff1a; 在觀察期內&#xff0c;若存在超過一半的日子用電量低于某給定的閾值 e&#xff0c;則該住房為“可能空置”&#xff1b; 若觀察期超過某給定閾值…

1052 賣個萌 (20 分)

萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見&#xff0c;我們假設一個表情符號是按下列格式輸出的&#xff1a; [左手]([左眼][口][右眼])[右手]現給出可選用的符號集合&#xff0c;請你按用戶的要求輸出表情。 輸入格式&#xff1a; 輸入首先在前三…

1054 求平均值 (20 分)

1054 求平均值 &#xff08;20 分&#xff09;本題的基本要求非常簡單&#xff1a;給定 N 個實數&#xff0c;計算它們的平均值。但復雜的是有些輸入數據可能是非法的。一個“合法”的輸入是 [?1000,1000] 區間內的實數&#xff0c;并且最多精確到小數點后 2 位。當你計算平均…

【Leetcode | 12】342. 4的冪

給定一個整數 (32 位有符號整數)&#xff0c;請編寫一個函數來判斷它是否是 4 的冪次方。 示例 1: 輸入: 16 輸出: true 示例 2: 輸入: 5 輸出: false 方法一&#xff1a; class Solution { public:bool isPowerOfFour(int num) {// 0x55555555 二進制 1010101010101010101010…

1056 組合數的和 (15 分)

給定 N 個非 0 的個位數字&#xff0c;用其中任意 2 個數字都可以組合成 1 個 2 位的數字。要求所有可能組合出來的 2 位數字的和。例如給定 2、5、8&#xff0c;則可以組合出&#xff1a;25、28、52、58、82、85&#xff0c;它們的和為330。 輸入格式&#xff1a; 輸入在第一行…

【Leetcode | 42】129. 求根到葉子節點數字之和

給定一個二叉樹&#xff0c;它的每個結點都存放一個 0-9 的數字&#xff0c;每條從根到葉子節點的路徑都代表一個數字。 例如&#xff0c;從根到葉子節點路徑 1->2->3 代表數字 123。 計算從根到葉子節點生成的所有數字之和。 說明: 葉子節點是指沒有子節點的節點。 示例…

1057 數零壹 (20 分)

給定一串長度不超過 10?5?? 的字符串&#xff0c;本題要求你將其中所有英文字母的序號&#xff08;字母 a-z 對應序號 1-26&#xff0c;不分大小寫&#xff09;相加&#xff0c;得到整數 N&#xff0c;然后再分析一下 N 的二進制表示中有多少 0、多少 1。例如給定字符串 PAT…

145. 二叉樹的后序遍歷

給定一個二叉樹&#xff0c;返回它的 后序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [3,2,1] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 鏈接&#xff1a;…

1055 集體照 (25 分)

拍集體照時隊形很重要&#xff0c;這里對給定的 N 個人 K 排的隊形設計排隊規則如下&#xff1a; 每排人數為 /&#xff08;向下取整&#xff09;&#xff0c;多出來的人全部站在最后一排&#xff1b; 后排所有人的個子都不比前排任何人矮&#xff1b; 每排中最高者站中間&am…

暫時記一下

1. 用epoll的ET模式實現一個服務器框架 要求&#xff1a; 接受client連接建立&#xff0c;出錯處理處理client關閉連接以及出錯TCP邊界問題&#xff0c;其實就是TCP粘包 寫了3頁的代碼2. 進程間通信方式&#xff0c;怎樣實現在兩個進程間互斥訪問共享內存&#xff0c;我說給共…

1058 選擇題 (20 分)

批改多選題是比較麻煩的事情&#xff0c;本題就請你寫個程序幫助老師批改多選題&#xff0c;并且指出哪道題錯的人最多。 輸入格式&#xff1a; 輸入在第一行給出兩個正整數 N&#xff08;≤ 1000&#xff09;和 M&#xff08;≤ 100&#xff09;&#xff0c;分別是學生人數和多…

1060 愛丁頓數 (25 分)

英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力&#xff0c;還定義了一個“愛丁頓數” E &#xff0c;即滿足有 E 天騎車超過 E 英里的最大整數 E。據說愛丁頓自己的 E 等于87。 現給定某人 N 天的騎車距離&#xff0c;請你算出對應的愛丁頓數 E&#xff08;≤&a…

數值的整數次方

題目描述 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 class Solution {public:double Power(double base, int exponent) {double res 1.0;for(int i exponent; i ! 0; i / 2){if(i % 2 ! 0)res * base;base * base;}return exponen…

1061 判斷題 (15 分)

判斷題的評判很簡單&#xff0c;本題就要求你寫個簡單的程序幫助老師判題并統計學生們判斷題的得分。 輸入格式&#xff1a; 輸入在第一行給出兩個不超過 100 的正整數 N 和 M&#xff0c;分別是學生人數和判斷題數量。第二行給出 M 個不超過 5 的正整數&#xff0c;是每道題的…

1064 朋友數 (20 分)

如果兩個整數各位數字的和是一樣的&#xff0c;則被稱為是“朋友數”&#xff0c;而那個公共的和就是它們的“朋友證號”。例如 123 和 51 就是朋友數&#xff0c;因為 123 51 6&#xff0c;而 6 就是它們的朋友證號。給定一些整數&#xff0c;要求你統計一下它們中有多少個不…

1067 試密碼 (20 分)

當你試圖登錄某個系統卻忘了密碼時&#xff0c;系統一般只會允許你嘗試有限多次&#xff0c;當超出允許次數時&#xff0c;賬號就會被鎖死。本題就請你實現這個小功能。 輸入格式&#xff1a; 輸入在第一行給出一個密碼&#xff08;長度不超過 20 的、不包含空格、Tab、回車的非…

1065 單身狗 (25 分)

單身狗”是中文對于單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人&#xff0c;以便給予特殊關愛。 輸入格式&#xff1a; 輸入第一行給出一個正整數 N&#xff08;≤ 50 000&#xff09;&#xff0c;是已知夫妻/伴侶的對數&#xff1b;隨后 N 行&#xff0c…

存儲

一、多重繼承&#xff08;無虛函數覆蓋&#xff09; 下面&#xff0c;再讓我們來看看多重繼承中的情況&#xff0c;假設有下面這樣一個類的繼承關系。注意&#xff1a;子類并沒有覆蓋父類的函數。 class Base1 { public: virtual void f() { cout << "Base1::f&quo…