合肥工业大学oj 1338 二维矩阵

#include<iostream>
#include<vector>
#include<iomanip>
#include<cmath>
using namespace std;

int T, k = 2;
int prime();
bool isprime(int);

int main(){
    cin >> T;
    vector<int> primeNum;
    while(primeNum.size() != 10000){//由题干可知,我们先计算10000质数存起来以备后用(当然不提前计算也可以)
        primeNum.push_back(prime());
    }
    while(T--){
        int m, n;
        cin >> m >> n;
        int matrix[m][n];
        int start = 0, dir = 1, t = 0;//用dir实现方向的控制
        for(int i = 0; i < n; i++){
            for(int j = start; (j >= 0 && j < m); j += dir){
                matrix[j][i] = primeNum[t++];
            }
            start += dir * (m - 1);//改变起始的下标
            dir *= -1;//改变dir的方向
        }
        
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                cout << setw(6) << matrix[i][j];//按照格式输出
            }
            cout << endl;
        }
    }
    
    return 0;
}

int prime(){//用于输出质数
    while(true){
        if(isprime(k)){
            return k++;
        }else{
            k++;
        }
    }
}

bool isprime(int k){//判断是不是质数
       for(int i = 2; i <= sqrt((double)k); i++)        
         if(k % i == 0) return false;      
    return true;
}

//presented by 大吉大利,今晚AC

猜你喜欢

转载自blog.csdn.net/lalala_HFUT/article/details/88063626