kiem tien, kiem tien online, kiem tien truc tuyen, kiem tien tren mang
Monday, October 31, 2011


Ma trận xoáy ốc được tạo thành bằng cách điền số 1 vào hàng 1 cột 1, sau đó tăng dần theo chiều kim đồng hồ.


1
2
3
4
5
16
17
18
19
6
15
24
25
20
7
14
23
22
21
8
13
12
11
10
9


Hãy viết chương trình cho biết giá trị tại ô (x,y) của ma trận xoáy ốc vuông kích thước nxn

Input: Dong dau tien ghi bộ số test, không lớn hơn 100. Mỗi bộ test được ghi trên một dòng, bao gồm 3 số n  x  y ( 1<=n,x,y<=100)

Out put: Với mỗi bộ test, in ra giá trị tạo hàng x, cột y trong ma trận xoáy ốc nxn

Ý  tưởng:

Tạo ra một ma trận hình xoáy ốc

Ví dụ: Với ma trân a[5][5]

Nhận xét:

Duyệt hàng 1:   1 2 3 4 5 : Giữ nguyên chỉ số hàng, tăng cột (   duyệt đến cột 5)

Duyệt cột 5: giữ nguyên chỉ số cột, tăng chỉ số hàng (  duyệt đến hàng 5)

Duyệt hàng 5: giữ nguyên chỉ số hàng, giảm chỉ số cột  (duyệt đến cột 1)

Duyệt cột 1: giữ nguyên chỉ số cột , giảm chỉ số hàng ( duyệt đến hàng 2 )

Duyệt hàng 2: giữ nguyên chỉ số hàng, tăng chỉ số cột ( duyệt đến cột 4)

Như vậy cứ sau 3 lần duyệt: 

Chỉ số hàng Min tăng lên 1

Sau 4 lần duyệt:

Chỉ số cột Max giảm đi 1

Tại mỗi lần duyệt , giá trị của phần tử sau lớn hơn phần tử trước 1 đơn vị.




#include<iostream>


int a[21] = {0,0,1,7,4,2,6,8,10,18,22,20,28,68,88,108,188,200,208,288,688};
void max(int n)
{
int k =n/2;
std::cout<<" ";
if(n%2){
std::cout<< 7;
--k;
}

while( k>0)
{
std::cout<<1;
--k;
}

}

void min(int n)
{

if(n<=20)
{
std::cout<<a[n];
return;
}
int t,k;
t =n%7 ;
k = n/7;
if(t !=0)
{
k = k -2;
t = t+ 14;

std::cout<<a[t];
}
while(k>0)
{
std::cout<<8;
--k;
}

}
int main()
{
int n, sum;
// sum = so bo so
std::cin >> sum;
for(int i=1;i<=sum;++i)
{
std::cin >>n;
min(n);
max(n);
std::cout<< std::endl;
}

return 0;
}



0 comments:

Post a Comment

domain, domain name, premium domain name for sales

Popular Posts