- 相關(guān)推薦
阿里巴巴筆試中的 兩道編程題
兩道編程題:
1請用最少的額外空間將一個M*N的矩陣旋轉(zhuǎn)90度,寫出算法描述和類c語言程序;
2完成如下函數(shù),給定分子和分母,輸出其小數(shù)表示形式,循環(huán)節(jié)用[]表示,例如給出分子:13,分母19,輸出為:0.[13]
參考解答:
只需要一個空間即可(下標變量i),考慮的是順時針旋轉(zhuǎn)
#include "iostream.h"
const int M=5;
const int N=3;
void main()
{
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int c[N][M]={0};
int i;//只需一個空間i。
for(i=0;i
c[i%N][M-1-i/N]=a[i/N][i%N];//就這句話
for(i=0;i
{
if(i%N == 0)
cout<
}
cout<
for(i=0;i
{
if(i%M == 0)
cout<
cout<
}
cout<
}
最省空間的矩陣轉(zhuǎn)置
#include "stdafx.h"
#include
using namespace std; int main()
{
const int M = 5;
const int N = 3;
int a[M][N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int* p = a[0];
//轉(zhuǎn)90度后的矩陣設(shè)為b[N][M],則 b[j] = *(p + i + j*N)
for(int i = 0; i < N; i++)
{
for(int j =0; j < M; j++)
{
cout<< *(p + i + j*N) <<",";
}
cout<
}
system("pause");
return 0;
}
這是一個Matrix Transposition In place(M!=N) 問題。1972年 MIT的一個教授給出了到目前為止的最佳解法。不過好像沒有樓上這些人說的那么簡單,其中還包含了一個定理。大家可以去搜論文,嘿嘿.
Key word:Matrix Transposition In place
transposition, matrix operations, permutation,primitive roots, number theory
【阿里巴巴筆試中的 兩道編程題】相關(guān)文章:
阿里巴巴筆試題201502-19
阿里巴巴校招筆試題11-29
阿里巴巴校招筆試題目11-29
阿里巴巴校招筆試題,試題分享02-25
2015阿里巴巴運營專員崗位筆試題11-13
平安筆試群毆題11-19
聯(lián)想筆試真題09-26