csu 21级期中机试-打印图形

问题 BC: 21级期中机试-打印图形(10分)
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB

题目描述
杨辉三角,其特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的左边两个整数之和。老师给了小南一个任务,就是打印一个n´n的方阵。方阵的上三角是用2开始的素数从左至右从上至下进行填充,下三角是一个杨辉三角。如下图所示的是一个6´6方阵:下三角(蓝色部分)是一个杨辉三角,其余部分(红色部分)按行序依次从小到大填充素数。

给定一个整数n,你能帮他编写程序输出满足要求的图形吗?
输入
多组样例。每行输入一个样例包括一个整数n(0<n≤30)。
输出
对于每一个输入的n,请输出相应行数的方阵图形,每一行的整数之间用一个空格隔开。每一个方阵后面加一个空行。
样例输入 Copy
2
5
样例输出 Copy
1 2
1 1

1 2 3 5 7
1 1 11 13 17
1 2 1 19 23
1 3 3 1 29
1 4 6 4 1

#include<stdio.h>
int main(void)
{
	int prime[600] = { 0,2},z=2,flag;
	for (int i = 3;z<600; i++)//先求出一个素数数列
	{
		flag = 1;
		for (int m = 2; m * m <= i; m++)
		{
			if (i % m == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag)
		{
			prime[z] = i;
			z++;
		}
	}
	int n;
	while (~scanf("%d", &n))
	{
		int arr[50][50] = {0};
		int primesum = 1;
		arr[1][1] = 0;
		for (int hang = 1; hang <= n; hang++)
		{
			arr[hang][1] = 1;//打印每行左1
			for (int lie = 2; lie <= n; lie++)//打印每行的杨辉三角
			{
				arr[hang][lie] = arr[hang - 1][lie - 1] + arr[hang - 1][lie];
			}
			arr[hang][hang] = 1;//打印每行右1
			for (int m = hang+1; m <= n; m++)//打印素数
			{
				arr[hang][m] = prime[primesum];
				primesum++;
			}
		}
		for (int x = 1; x <= n; x++)
		{
			for (int y = 1; y <= n; y++)
			{
				if (y == n)
					printf("%d\n", arr[x][y]);
				else
					printf("%d ", arr[x][y]);
			}
		}
		printf("\n");
	}
	return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值