CCF201503
阿新 • • 發佈:2018-12-28
1.
影象旋轉
問題描述
旋轉是影象處理的基本操作,在這個問題中,你需要將一個影象逆時針旋轉90度。
計算機中的影象表示可以用一個矩陣來表示,為了旋轉一個影象,只需要將對應的矩陣旋轉即可。
輸入格式
輸入的第一行包含兩個整數n, m,分別表示影象矩陣的行數和列數。
接下來n行每行包含m個整數,表示輸入的影象。
輸出格式
輸出m行,每行包含n個整數,表示原始矩陣逆時針旋轉90度後的矩陣。
樣例輸入
2 3
1 5 3
3 2 4
樣例輸出
3 4
5 2
1 3
評測用例規模與約定
1 ≤ n, m
思路:找對應位置下標關係
程式碼:
#include<iostream> #include<algorithm> using namespace std; int a[1005][1005]; int b[1005][1005]; int main() { int n,m,i,j; cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>a[i][j]; for(i=0;i<m;i++) { for(j=0;j<n;j++) { b[i][j]=a[j][m-i-1]; } } for(i=0;i<m;i++) { for(j=0;j<n;j++) { cout<<b[i][j]<<" "; } cout<<endl; } return 0; }
2
數字排序
先用桶裝下每個數出現的次數,然後對輸入數字排序去重(編號安從小到大排序,後面無需考慮大小),得桶的個數,據桶的個數安編號對應的桶中的次數大小對編號排序。
#include<iostream> #include<algorithm> using namespace std; int main() { int n,i,j,k,t; int a[1005],b[1005]={0}; cin>>n; for(i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n);//排序 for(i=0;i<n;i++) { b[a[i]]++;//便籤桶,記錄出現次數 } k=unique(a,a+n)-a;//去重函式,k是去重後的陣列大小 for(i=0;i<k;i++)//氣泡排序 { for(j=1;j<k;j++) { if(b[a[j]]>b[a[j-1]])//以存在b陣列的次數大小對a中的編號排序 { t=a[j-1];a[j-1]=a[j];a[j]=t; } } } for(i=0;i<k;i++)//輸出編號和對應的出現次數 cout<<a[i]<<" "<<b[a[i]]<<endl; cout<<endl; return 0; }