蛇形串---------
1 题目描述 2 萌萌哒 孟孟学长 参加去年的训练的时候,蛇形矩阵那题被他分分钟秒掉,于是他决定出一个更难的题目,要求矩阵里的每个数都是质数,而且,蛇形的规则也有变化 3 如2*3矩阵: 4 5 2 13 11 6 3 5 7 7 8 9 再如3*4的矩阵 10 11 2 29 23 19 12 3 31 37 17 13 5 7 11 13 14 15 16 17 输入 18 第一行为一个正整数T,表示数据的组数,接下来T行,每行两个正整数n,m,表示矩阵有n行m列 19 输出 20 对于每一个输入输出n行,每行m个数,表示这个矩阵,输出内容见题目描述,每个数输出宽度为 7 21 样例输入 22 2 23 2 3 24 3 4 25 样例输出 26 2 13 11 27 3 5 7 28 2 29 23 19 29 3 31 37 17 30 5 7 11 13 31 提示 32 1<=n,m<=100
不管未来从事什么都要能沉的下去,这样才可以 浮上来 , 例如 这一道题因为自己不想写浪费了不少时间 最后 在纸上 经过一段时间的 思考之后 就做出来了 应该沉的下去
不论做什么事 , 都要有一颗巨匠的心 , 原因沉住气去打造一把绝世宝剑 .
当出现 错误的时候 多想想那些 可能出错的 输入输出
最早的时候 就是 输入 5 1 的时候 出现错误 发现 重复赋值了 这时候 最简单 快捷的方法就是 直接 memset归零 赋值的时候 检查有没有 重复赋值
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; bool isPrime(int num) { if (num == 2 || num == 3) { return true; } if (num % 6 != 1 && num % 6 != 5) { return false; } for (int i = 5; i*i <= num; i += 6) { if (num % i == 0 || num % (i+2) == 0) { return false; } } return true; } int prime[10000],pri; int a[131][131]; int main() { int n,m,t,i,q,j; for(pri=0,i=2;i<100000;i++) { if(isPrime(i)) prime[pri++]=i; } scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); // 输入 矩阵的 行列 q=n<m?n:m; q/=2; q++; for(pri=i=0;i<q;i++) { for(j=i;j<n-i&&!a[j][i];j++) a[j][i]=prime[pri++]; for(j=i+1;j<m-i&&!a[n-i-1][j];j++) a[n-i-1][j]=prime[pri++]; for(j=n-2-i;j>=i&&!a[j][m-i-1];j--) a[j][m-i-1]=prime[pri++]; for(j=m-2-i;j>i&&!a[i][j];j--) a[i][j]=prime[pri++]; } for(i=0;i<n;i++) { for(j=0;j<m;j++) { printf("%7d",a[i][j]); } printf("\n"); } } }