Ma trận xoáy ốc fibonacci

đề bài: Ma trận xoáy ốc Fibonacci cấp N là ma trận vuông có N*N phần tử trong đó các số Fibonacci được điền vào ma trận theo chiều kim đồng hồ (bắt đầu từ số 1).
inout n=3;
ouput:
1 1 2
21 34 3
13 8 5
ý tưởng của em là in ma trận xoắn ốc vuông cấp n với gtri m tăng tương ứng (m từ 1 đến n*n).mọi người xem giúp e sai gì với ạ.em cám ơn

#include<iostream>
using namespace std;
int n,a[100][100];
int gtr(int n) {
    if (n==1 || n==2) return 1;
    int f1=1;
    int f2=1;
    int fn;
    for(int i=3;i<=n;i++) {
        fn=f1+f2;
        f1=f2;
        f2=fn;
    }
    return fn;
}
void conduct() {
          int m=1;
          while(m<=n*n) {
              int hang;
              hang=n-1;
              int cot=n-1;
              int d=0;
              while(d<=n/2) {
                  for(int i=d;i<=cot;i++) {
                      a[d][i]=gtr(m++);
                  }
                  for(int i=d+1;i<=hang;i++) a[i][cot]=gtr(m++);
                  for(int i=cot-1;i>=d;i--) a[hang][i]=gtr(m++);
                  for(int i=hang-1;i>d;i--) a[i][d]=gtr(m++);
                  hang--;
                  cot--;
                  d++;
              }
              m++;
          }
}
void result() {
    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            cout<<a[i][j];
        }
        cout<<endl;
    }
}

int main() {
    int T;
    cin>>T;
    for(int i=1;i<=T;i++) {
        int n;
        cin>>n;
        cout<<"Test "<<i<<": ";
        gtr(n);
        conduct();
        result();
    }
}

Kinh nghiệm là bớt dùng biến toàn cục nha bạn, nhất là mấy bài chạy nhiều test case 1 lần thì lại càng không nên. Check comment bên dưới code để xem issue nằm đâu nha:

#include<iostream>
using namespace std;
int n,a[100][100];
int gtr(int n) {
    if (n==1 || n==2) return 1;
    int f1=1;
    int f2=1;
    int fn;
    for(int i=3;i<=n;i++) {
        fn=f1+f2;
        f1=f2;
        f2=fn;
    }
    return fn;
}
void conduct() {
          int m=1;
          while(m<=n*n) {
              int hang;
              hang=n-1;
              int cot=n-1;
              int d=0;
              while(d<=n/2) {
                  for(int i=d;i<=cot;i++) {
                      a[d][i]=gtr(m++);
                  }
                  for(int i=d+1;i<=hang;i++) a[i][cot]=gtr(m++);
                  for(int i=cot-1;i>=d;i--) a[hang][i]=gtr(m++);
                  for(int i=hang-1;i>d;i--) a[i][d]=gtr(m++);
                  hang--;
                  cot--;
                  d++;
              }
              m++;
          }
}
void result() {
    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            cout<<a[i][j];
        }
        cout<<endl;
    }
}

int main() {
    int T;
    cin>>T;
    for(int i=1;i<=T;i++) {
        //int n; // Sai dòng này nha bạn
        cin>>n;
        cout<<"Test "<<i<<": ";
        gtr(n);
        conduct();
        result();
    }
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?