有一道c++的编程题 有大神会嘛

【题目】编写程序,将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