warning:循环之后修改的变量及时恢复,能不修改就不修改,可引入另一个变量来对它进行运算。
如果只有第一个输出正确,那么极大可能是这种情况。
问题 K: 21级期中机试-打印图形(10分)
题目描述
杨辉三角,其特点是两个腰上的数字都为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>
long long getPrimeNumbers2(int n)
{
long long buff[455];
buff[0]=2;
buff[1]=3;
buff[2]=5;
buff[3]=7;
buff[4]=11;
int primeNumCount=5;
int testNum=13;
int i;
while(primeNumCount<n)
{
for(i=0;i<primeNumCount;i++)
{
if(testNum%buff[i]==0)
break;
}
if(i==primeNumCount)
{
buff[primeNumCount]=testNum;
primeNumCount++;
}
testNum+=2;
}
return buff[n-1];
}
int main()
{
int num;
while(scanf("%d",&num)!=EOF)
{
long long a[100][100]={0};//每循环一遍就要重新赋值成0
for(int i=0;i<num;i++)
{
a[i][0]=1;
}
for(int i=1;i<num;i++)
{
for(int j=1;j<=i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
int flag=1;
int m=num;
for(int i=0;i<num-1;i++)
{
for(int j=num-m+1;j<num;j++)
{
a[i][j]=getPrimeNumbers2(flag);
flag++;
}
m--;
}
for(int i=0;i<num;i++)
{
for(int j=0;j<=num-1;j++)
{
printf("%lld ",a[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}