手机端网站建设教程,wordpress 不同文章不同模板,全网媒体整合推广平台,北京网站设计济南兴田德润评价分析#xff1a;本题主要使用的是素数进行输出#xff0c;然后难点是如何按照题目要求格式输出。
思路#xff1a;
第一#xff1a;我们可以先让素数存给一个一维数组#xff0c;至于存多少个素数#xff0c;是矩阵n*n个#xff0c;控制数量用计数器count即可#xf…分析本题主要使用的是素数进行输出然后难点是如何按照题目要求格式输出。
思路
第一我们可以先让素数存给一个一维数组至于存多少个素数是矩阵n*n个控制数量用计数器count即可将所需要足够的素数存到一维数组后就该考虑如何让这些元素按照题目格式。
第二易知输出格式是二维的因此要动用二维数组创建一个新的二维数组想办法将一维数组的元素存到二维数组中按照题目格式
第三数组最重要的特点就是下标因此我们要利用好下标下面以4*4矩阵为例画图分析 以从上到下从左到右的顺序top和left作为初始值0bottom和right作为边界值3
按照逆时针顺序
第一步下标行不变列增加即00到30
第二步下标列不变行增加即30到33
第三步下标行不变列减少即33到03
第四步下标列不变行减少即03到01
于是最外围的解决完后发现内圈还是矩阵于是再次循环……
第四将一维数组中所有的素数都存给二维数组后就打印该二维数组
答案
#include stdio.h
#include math.hint is_prime(int n) // 判断是否为素数
{if (n 1) //2是最小的素数所以比2小的都不是素数{return 0; //为假}int sqr sqrt(n); for (int i 2; i sqr; i) //优化算法{if (n % i 0) //有其他因子{return 0; //为假}}return 1; //否则是素数为真
}int main()
{int n 0;scanf(%d, n);int primes[1600] { 0 }; // 存储素数序列的一维数组int count 0; // 计数器计算已有素数个数int num 2; // 从2开始判断素数while (count n * n) // 存n*n个的素数{if (is_prime(num)) {primes[count] num;}num;}int arr[40][40]; // 存储密码矩阵的二维数组int left 0, right n - 1, top 0, bottom n - 1; // 四个边界int index 0; // 素数序列下标 while (left right top bottom) //判断是否还有内圈{ for (int i top; i bottom; i) //第一步{arr[i][left] primes[index];}for (int i left 1; i right; i) //第二步{arr[right][i] primes[index];}for (int i bottom - 1; i top; i--) //第三步{arr[i][right] primes[index];}for (int i right - 1; i left; i--) //第四步{arr[top][i] primes[index];}left; //初始值加1right--; //边界值减1top; //初始值加1bottom--; //边界值减1}for (int i 0; i n; i) //输出密码矩阵{for (int j 0; j n; j){printf(%5d , arr[i][j]);}printf(\n);}return 0;
}