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ạ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 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