2020年9月青少年C/C++软件编程(三级)等级考试试卷 T1 铺砖

9273:PKU2506Tiling

OpenJudge - 9273:PKU2506Tiling




C++参考代码一:

/*
2.3基本算法之递归变递推_9273:PKU2506Tiling
http://noi.openjudge.cn/ch0203/9273/
*/
#include<iostream>
#include<cstdio>
using namespace std;
int a[251][200],b,n,k=199;
int main()
{
	/*第一个下标储存第N个数,即地砖列数,第二个下标储存该数的某一位。*/
	a[0][0]=1;
	a[1][0]=1;
	a[2][0]=3;
	
	//For循环求出当地砖列数为3-250时的值。
	for(int i=3;i<=250;i++)
	for(int j=0;j<=199;j++)  //每个高精度数组设为200位。
	{
		a[i][j]=a[i-1][j]+a[i-2][j]+a[i-2][j]+b;
		/*高精加,递推式为a[i][j]=a[i-1][j]+a[i-2][j]*2,初始情况分别为 
			两块1*2横放(剩下n-2列),一块2*2(剩下n-2列),一块1*2竖放(剩 
			下n-1列)*/
		b=a[i][j]/10;
		a[i][j]%=10;
	}
	
	//也可用while(cin>>n)
	while(scanf("%d",&n)!=EOF)
	{
		//每循环一次进行一次初始化。
		k=199;
		
		//消去前导0。
		while(a[n][k]==0)
		{
			k--;
		}

		for(int i=k;i>=0;i--)
			cout<<a[n][i];
		cout<<endl;
	}
	
	return 0;
}


C++参考代码二:

/*
2.3基本算法之递归变递推_9273:PKU2506Tiling02
http://noi.openjudge.cn/ch0203/9273/
*/
#include<cstdio>
#include<cstdlib>
#include<iostream> 
#include<algorithm>
using namespace std;
int main() 
{ 
	int a[501][501],i,j;
	 
	a[1][0]=1; 
	a[1][1]=1; 
	a[2][0]=1; 
	a[2][1]=3;
	 
	for(i=3;i<=300;i++)
	{ 
		for(j=1;j<=max(a[i-2][0],a[i-1][0]);j++) 
			a[i][j]=a[i-1][j]+a[i-2][j]*2;
			 
		a[i][0]=max(a[i-2][0],a[i-1][0]); 
		for(j=1;j<=a[i][0];j++)
		{ 
			a[i][j+1]+=a[i][j]/10; 
			a[i][j]%=10; 
		} 
		
		while(a[i][a[i][0]+1])
		{ 
			a[i][0]++; 
			a[i][a[i][0]+1]+=a[i][a[i][0]]/10; 
		} 
	} 
	
	int n; 
	while(cin>>n)
	{ 
		if(n==0) 
			cout<<1<<endl; 
		else
		{ 
			for(int i=a[n][0];i>=1;i--) 
				cout<<a[n][i]; 
			cout<<endl; 
		}	 
	}
	
	return 0;
}


C++参考代码三:

/*
2.3基本算法之递归变递推_9273:PKU2506Tiling03
http://noi.openjudge.cn/ch0203/9273/
*/
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int N = 2010;
int a[300][300];
 
int main()
{
    memset(a,0,sizeof(a));
    a[0][0]=1, a[1][0]=1,a[2][0]=3;
    int n;
    while(scanf("%d", &n)!=EOF)
    {
        if(n==2) cout<<3<<endl;
        else
        {
            int digit=1;
            for(int i=3; i<=n; i++)
            {
                int sum=0;
                for(int j=0; j<digit; j++)
                {
                    a[i][j]=(sum+a[i-1][j]+2*a[i-2][j])%10000;
                    sum=(sum+a[i-1][j]+2*a[i-2][j])/10000;
                }
                if(sum!=0)
                {
                    a[i][digit++]=sum;
                }
            }
            cout<<a[n][digit-1];
            for(int i=digit-2; i>=0; i--) printf("%04d",a[n][i]);
            cout<<endl;
        }
    }
 
    return 0;
}



  NOI / 2.2基本算法之递归和自调用函数&&递归变递推

https://xcdqaaa.blog.csdn.net/article/details/115328641

NOI / 2.3基本算法之递归变递推——题目 排名 状态 提问 9273:PKU2506Tiling

NOI / 2.3基本算法之递归变递推——题目 排名 状态 提问 9273:PKU2506Tiling_普青落的博客-CSDN博客

PKU2506Tiling

PKU2506Tiling_、朝露的博客-CSDN博客

POJ 9273:PKU2506Tiling(dp高精度)

POJ 9273:PKU2506Tiling(dp高精度)_Ctrl AC的博客-CSDN博客

9273:PKU2506Tiling(2种解法递归和递推)

9273:PKU2506Tiling(2种解法递归和递推)_Dunyb的博客-CSDN博客




电子学会青少年编程等级考试

https://blog.csdn.net/dllglvzhenfeng/category_11735875.html

中国电子学会考评中心

中国电子学会考评中心

软件编程(C语言)

中国电子学会考评中心




电子学会 青少年软件编程等级考试 C语言 3 级

电子学会 青少年软件编程等级考试 C语言 3 级_dllglvzhenfeng的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值