试题C:蛇形填数
【问题描述】
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …
…
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列
的数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案为: 761
解法一:遍历
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
const int Max=2020;
int s[Max][Max];
int main(){
memset(s,0,sizeof(s));
int qus=20;
s[0][0]=1;
int x=0,y=0,sum=2;
while(sum<Max){
y++;
while(x!=-1&&y!=-1 ){
s[x][y]=sum++;
if(y==0)
break;
x++;
y--;
}
x++;
while (x!=-1 && y!=-1) {
s[x][y]=sum++;
if (x==0)
break;
x--;
y++;
}
}
cout<<s[19][19];
return 0;
}
这里用二维数组,利用循环将每一位存起来,这里注意边界的判断。
解法二:找规律
通过将题中的图补充一部分,找到所求的斜线的规律。
F(n)=F(n-1)+4*(n-1)
#include<iostream>
using namespace std;
//1 5 13 25
int Snack(int n){
if(n<=1) return 1;
if(n>1){
return Snack(n-1)+4*(n-1);
}
}
int main() {
int n;
cin>>n;
cout<<Snack(n);
return 0 ;
}