【题目】编写程序,将4×4矩阵包括主对角线在内的右上三角区域内的数组元素做如 下判断和变换:如果该数是素数则用大于该数的最小素数替换;否则保持原数不变,同时 统计包括主对角线在内的右上三角区域内的元素中素数的个数 程序的输出结果为: 变换前的数组a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 变换后的数组a 1 3 5 4 5 6 11 8 9 10 13 12 13 14 15 16 素数个数:4
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
#include <string>
//判断是否是素数
bool isSushu(int n)
{
if(n <2) return false;
for (int i = 2; i < n; i++)
{
if (n %i == 0)
{
return false;
}
}
return true;
}
//求大于n的最小素数
int sushu(int n)
{
int d = n+1;
while(true)
{
int i = 2;
for (; i < d; i++)
{
if (d %i == 0)
{
d++;
break;
}
}
if (i == d)
{
return d;
}
}
}
int main()
{
int a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
for (int i = 0; i < 4;i++)
{
for(int j = i; j < 4; j++)
{
if (isSushu(a[i][j]))
{
a[i][j] = sushu(a[i][j]);
}
}
}
for (int i =0; i < 4;i++)
{
for (int j = 0; j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
getchar();
getchar();
return 0;
}
这个题没有什么难度啊。写个素数判断函数,然后对数组进行遍历和替换就可以
bool pri(int n) {//素数
if(n<2) return false;
for(int i=2; i<n; i++) {
if(n%i==0) return false;
}
return true;
}
int nextpri(int n) //获取下一个素数
{
do
{
n++;
if(pri(n))
return n;
}while(true);
}
int main()
{
int data[4][4];
int i,j,num=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&data[i][j]);
//
for(i=0;i<4;i++)
for(j=i;j<4;j++)
{
if(pri(data[i][j]))
{
num++;
data[i][j] = nextpri(data[i][j]);
}
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
printf("%d ",data[i][j]);
printf("素数个数为:%d",num);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632