重刷PTA递推实验

28 篇文章 2 订阅
14 篇文章 24 订阅

1 马拦过河卒 (20 分)

#include<stdio.h>
int main()
{
    int a[9]={0,-1,-1,1,1,2,2,-2,-2};
    int b[9]={0,2,-2,2,-2,1,-1,1,-1};//表示马可能存在的九个点位;
    int map[16][16]={0};//相当于做一个“棋盘”;
    long long can[16][16]={0};//表示可以通行的点位;
    int n,m,x,y,i,j;
    scanf("%d %d %d %d",&n,&m,&x,&y);
    for(i=0;i<16;i++)
        for(j=0;j<16;j++)
            map[i][j]=1;//首先让整个“棋盘”均可通行,定义点位值为‘1’是可通行的点;
    for(i=0;i<9;i++)
    {
        if(a[i]+x<=15&&a[i]+x>=0&&b[i]+y>=0&&b[i]+y<=15)//马所在点位不能出棋盘这个边界;
            map[a[i]+x][b[i]+y]=0;//让马所在点位的点变成不能通行的点,也就是点位值为‘0’;
    }
    for(i=0;i<16;i++)
    {
        if(map[i][0]==1)//行操作,如果“棋盘”上的点位值为1,表示其可通过;
        {
            can[i][0]=1;//此时,定义可通过的点位为1;
        }
        else break;//如果不是,也就是说碰到马所在点位,即停止循环;
    }
    for(i=0;i<16;i++)
    {
        if(map[0][i]==1)
        {
            can[0][i]=1;
        }//同样的,在列上进行操作;
        else break;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(map[i][j]==1)//如果棋盘上点位值为1,代表其可通过的话;
                can[i][j]=can[i-1][j]+can[i][j-1];
        }
    }
    printf("%lld",can[n][m]);//输出可通过路径的条数;
    return 0;
}

2 养兔子(20 分)

#include<stdio.h>
int main()
{
    int n,i;
    scanf("%d",&n);
    long long a[90]={0,1,2};//数值超过int范围,所以用long long int。同时,运算可知第0天0只,第一天一只,第二天两只,第三天就开始有规律了,为昨天的加前天的;
    for(i=3;i<=n;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    printf("%lld",a[n]);
    return 0;
}

3 母牛的故事 (20 分)

#include<stdio.h>
int main()
{
	int n,i;
	scanf("%d",&n);
    int a[55]={0,1,2,3,4};//由题易知,第0年0头,第一年1头,第二年2头...直到第五年开始,第一年买的小母牛也开始生产小母牛,所以从第五年开始有了规律,是上一年的加四年前的;
	for(i=5;i<=n;i++)
    {
        a[i]=a[i-1]+a[i-3];
    }
	printf("%d",a[n]);
	return 0;
}

4 黄金时代 (20 分)

#include<stdio.h>
#define k 0.6180339887//k是题中所给的数值;
int main()
{
	int n,i;
	scanf("%d",&n);
	int a[20]={0,5};//第一个数为5;
	for(i=1;i<=n;i++)
    {
        a[i+1]=a[i]/k+0.1;//这边需要注意,需要加0.1之后再取整才是所要的数值(比如说输入为3的时候,若不加0.1则输出数值为12,实际值应为13)通过计算可知,当输入数值为偶数时,可以得到正确的整数,而输入数值为奇数时,需要加0.1才可以得到正确的整数,所以我们就都加0.1即可;
    }
    printf("%d",a[n]);
	return 0;
}

5 骨牌铺方格(20 分)

#include<stdio.h>
int main()
{
	int n,i;
	long long a[60]={0,1,2,3};
	scanf("%d",&n);
	for(i=3;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	printf("%lld",a[n]);
	return 0;
}//从这个题往下都是一些很简单的数学题

6 爬楼梯 (20 分)

#include<stdio.h>
int main()
{
	int n,i;
	long long a[50]={0,1,2};
	scanf("%d",&n);
	for(i=3;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	printf("%lld",a[n]);
	return 0;
}

7 三国佚事——巴蜀之危 (20 分)

#include<stdio.h>
int main()
{
	int n,i;
	long long a[20]={0,0,1,2};
	scanf("%d",&n);
	for(i=4;i<=n;i++)
	{
		a[i]=(i-1)*(a[i-2]+a[i-1]);
	}
	printf("%lld",a[n]);
	return 0;
}

8 王小二切饼 (20 分)

#include<stdio.h>
int main()
{
	int n,i,a[100]={0,2};
	scanf("%d",&n);
	for(i=2;i<=n;i++)
	{
		a[i]=a[i-1]+i;//自己切一下找规律即可,每次切都要尽可能地于已有切线相交
	}
	printf("%d",a[n]);
	return 0;
}

9 蟠桃记 (20 分)

#include<stdio.h>
int main()
{
	int n,i,a[30]={1,4};
	scanf("%d",&n);
	for(i=2;i<n;i++)
	{
		a[i]=2*(a[i-1]+1);
	}
	printf("%d",a[n-1]);
	return 0;
 } 

10 C语言实验——拍皮球 (20 分)

#include<stdio.h>
int main()
{
    int t,n,i;
    double h,s;
    scanf("%lf %d",&h,&n);
    for(i=1;i<=n;i++)
    {
        if(i==1)
          s = h;
        else
       {
          s=s+(h*2.0);
       }
       h=h/2.0;
     }
    printf("%.2lf %.2lf",s,h);
    return 0;
} 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CRAEN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值