【PAT】乙级练习题

PAT乙级练习

题号题目
1001采花生
1002NowCoder数列
1003养兔子
1004客似云来
1005斐波那契凤尾
1006星际密码
1007母牛的故事
1008童年生活二三事
1009蜜蜂寻路
1010骨牌铺方格
1011NowCoder小定律
1012分数运算
1013分解因数
1014因子个数
1015skew数
1016一的个数
1017外星人的语言
1018数位和
1019进制回文数
1020发邮件
1021年会抽奖
1022有假币
1023考新郎
1024蟠桃记
1025三角形
1026圆周率
1027送外卖
1028乒乓球筐
1029不吉利的日期
1030最难的问题
1031直方图
1032选大王
1033害死人不偿命的(3n+1)猜想 (15)
1034写出这个数 (20)
10351003. 我要通过!(20)
1036成绩排名 (20)
1037继续(3n+1)猜想 (25)
1038换个格式输出整数 (15)
1039素数对猜想 (20)
1040数组元素循环右移问题 (20)
1041说反话 (20)
1042一元多项式求导 (25)

1001

1002

#include<stdio.h>
int main() {
    int n;
    while(scanf("%d",&n)!=EOF) {
        if(n%4==2)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

1003

1004

  • C++
#include<iostream>
using namespace std;
long long a[81]={0};
int main() {
    int m,n;
    a[0]=a[1]=1;
    for(int i=2;i<81;i++) {
        a[i]=a[i-1]+a[i-2];
    }
    while(cin>>m>>n) {
        long long sum=0;
        for(int i=m-1;i<n;i++) {
            sum+=a[i];
        }
        cout<<sum<<endl;
    }
    return 0;
}
  • Python
def main():
    while True:
        try:
            n,m=map(int,input().split())
            a=[1,1]
            for i in range(2,m+1):
                a.append(a[-1]+a[-2])
            s=sum(a[n-1:m])
            print(s)
        except:
            break
if '__name__'==main():
    main()

1005

def main():
    a=[1,1]
    for i in range(2,100001):
        a.append((a[-1]+a[-2])%1000000)
    while True:
        try:
            n=int(input())
            if n<37:
                print(a[n]%1000000)
            else:
                print('%.6d' % (a[n]%1000000))
        except:
            break
if '__name__'==main():
    main()

1006

  • 思考
    • n=1时,矩阵为:
      |1 1|
      |1 0|
      所以左上角数字为1
    • n=2时,矩阵为
      |1 1| * |1 1| => |2 1|
      |1 0| |1 0| |1 1|
      所以左上角数字为2

      n的取值:1 2 3 4 5 6 …
      左上角值:1 2 3 5 8 13 …
      斐波那契数列。。。
  • 代码
#include<iostream>
using namespace std;
int main() {
    int n,x,f[10001];
    f[0]=1;f[1]=1;
    for(int i=2;i<10001;i++)
	f[i]=(f[i-1]%10000+f[i-2]%10000)%10000;
    while(~scanf("%d",&n)) {
      while(n--) {
            cin>>x;
   printf("%04d",f[x]);
        }
        cout<<endl;
    }
    return 0;
}

1007

  • 思考

假设现在是第n年,有m头牛,求n+1年?n+1年一定会有第n年的m头牛,关键的为题是有多少头牛会生小牛,每头小母牛从第四个年头开始,每年年初也生一头小母牛,因此会n-3年所有牛都会生小牛。因此:

第n+1年=第n-1年+第n-3年

  • 代码
#include<iostream>
using namespace std;
int main() {
 int a[56],n;
 a[0]=1;
 a[1]=2;
 a[2]=3;
 a[3]=4;
 for(int i=4;i<56;i++) {
  a[i]=a[i-1]+a[i-3];
 }
 while(~scanf("%d",&n)) {
  cout<<a[n-1];
        cout<<endl;
    }
 return 0;
} 

1008

  • 思考

这是一个斐波拉契。

  • 代码
#include<iostream>
using namespace std;
int main() {
 long long a[91];
 int n;
 a[0]=1;
 a[1]=2;
 for(int i=2;i<91;i++) {
  a[i]=a[i-1]+a[i-2];
 }
 while(~scanf("%d",&n)) {
  cout<<a[n-1];
        cout<<endl;
    }
 return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值