2022.五年级真题

01.拍7

题目描述

小辉在玩一项名为 “拍7” 的游戏,参与游戏的人从 1 开始报数,如果当前报的数其数位上含 7 或者能被 7 整除,则玩游戏的人需要拍一下手堂。现在小辉想知道从 1 开始报数,第 X 个需要拍手掌的数是多少。数据保证第 X 个需要拍手掌的数其值不大于 100

输入格式

一个正整数 X

数据范围

保证第 X 个需要拍手的数其值不大于 100

输出格式

一个正整数为第 X 个需要拍手掌的数

样例

输入数据 1

3

Copy

输出数据 1

17

Copy

样例解释

前 3 个需要拍手掌的数分别是 7 , 14 , 17,第 3 个为 17

题解

#include<iostream>
#include<fstream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
long long n,a[100]={7,14,17,21,27,28,35,37,42,47,49,56,57,63,67,70,71,72,73,74,75,76,77,78,79,84,87,91,97,98},k,l=1,m,t;
int main()
{
     cin>>n;
     cout<<a[n-1];
     /*for(int i=7;i<=98;i+=7)
     {
      a[l]=i;
      l++;
     }
     for(int i=17;i<=97;i+=10)
     {
        a[l]=i;
         l++;
     }
     for(int i=70;i<=79;i++)
     {
        a[l]=i;
         l++;
     }
     sort(a+1,a+1+l);
     cout<<a[n+1];
     //cout<<a[n+1];*/
    return 0;
}

02.硬币 

题目描述

Q 国是银河系外某星球的一个高度文明的国家。在这个国家,有 1 元、2 元 3 元共 3 种硬币。现在小辉想去银行取钱,该银行很奇怪,每次你都只能取 1 枚硬币,且 3 元的硬币不能连续取。那么小辉想取 X 元至少要取多少次呢?

输入格式

一个正整数 X

数据范围

20% 数据,x <= 10

100% 数据,x <= 1000000000

输出格式

一个正整数代表至少需要取钱的次数。

样例

输入数据 1

6

Copy

输出数据 1

3

Copy

祥例解释

小辉可以先后取 3 元、 2 元、 1 元的债币各一枚,也可以连续 3 次取 2 元的硬币。但连续两次取 3 元侯币是不合法的。

题解

#include<bits/stdc++.h>
using namespace std;
long long n,ans;
int main(){
    cin>>n;
    ans=ans+n/(3+2)*2;
    if(n%(3+2)==0)cout<<ans;
    else if(n%(3+2)>3)cout<<ans+2;
    else cout<<ans+1;
    return 0;
}

03.次大公约数 

题目描述

两个整数共有的约数中最大的一个被称之为这两个整数的最大公约数。同样的这两个整数共有的约数中第二大的约数我们称之为这两个整数的次大公约数。

现在给你两个正整数 a 和 b ,请求出他们的次大公约数。

注意:如果 a , b 只有一个公约数,则我们就说此时次大公约数不存在,这时你输出 -1 即可。

输入格式

一行,两个正整数 a , b

数据范围

50% 的数据,1 <= a , b <= 10^8108

100% 的数据,1 <= a , b <= 10^{16}1016

输出格式

一个正整数,表示答案

样例

输入数据 1

4 6

Copy

输出数据 1

1

Copy

样例解释

4 和 6 的公约数有 12 第二大的公约数是 1

题解

#include<bits/stdc++.h>
using namespace std;
long long n,m,a;
int main(){
    cin>>n>>m;
    a=__gcd(n,m);
    if(a==1)
   {
        cout<<-1;
    }
    else
    {
        if(a%2==0)
        {
            cout<<a/2;
        }
        else if(a%3==0)
        {
            cout<<a/3;
        }
    }
    return 0;
}

04.显示器 

题目描述

小辉制作了一个显示器,该显示器显示的数值 a_1 , a_2 , a_3 ... , a_na1​,a2​,a3​...,an​ 是一开始就植入的,并会按照次序依次循环显示,每秒变化 1 次。也就是说,该显示器显示的数值是按照以下规律变化的: a_1a1​ -> a_2a2​ -> a_3a3​ ->... -> a_nan​ -> a_1a1​ -> a_2a2​ -> a_nan​ -> a_1a1​ ......

第 1 秒时该显示器显示的数值是 a_1a1​,小辉想知道第 x ~ 第 y 秒(包合第 x 秒和第 y 秒),计时器上出现的数值之和是多少?询问有 q 组。

输入格式

第一行,两个正整数 n , q 。

第二行,n 个正整数,为 a_1a1​ ~ a_nan​

接着 q 行,每行两个正整数 x , y

数据范围

20% 的数据,n , q <= 100 , a_iai​ <= 1000, 1 <= x <= y <= 1000

60% 的数据,n , q <= 10000 , a_iai​ <= 1000 , 1 <= x <= y <= 1000000

100% 的数据,n , q <= 100000 , a_iai​ <= 1000 , 1 <= x <= y <= 1000000000000

输出格式

q 行,每行一个正整数,表示第 x 秒~ 第 y 秒计时器上出现的数字之和

样例

输入数据 1

5 3
11 12 13 14 15
1 2
2 3
1 10

Copy

输出数据 1

23
25
130

Copy

样例解释

前 10 秒的数值为: 11 -> 12 -> 13 -> 14 -> 15 -> 11 -> 12 -> 13 -> 14 -> 15

#include<bits/stdc++.h>
using namespace std;
long long n,q,a[100005],s[100005],y,x;
int main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        s[i]=s[i-1]+a[i];
    }
    for(int i=1;i<=q;i++){
        cin>>x>>y;
        cout<<((y/n)*s[n]+s[y%n])-((x-1)/n*s[n]+s[(x-1)%n])<<endl;
    }
    return 0;
}

05.数对 

题目描述

小辉得到了一个包含 n 个数的数列,他要从中选出两个不同位置的数形成个一个数对,要求较左边的数对 k 取余的结果小于等于较右边的数对 k 取余的结果。

问小辉有多少种选法。

输入格式

第一行,两个正整数 n 和 k

接着 n 个正整数,为数列的值。

数据范围

50% 的数据,2 <= n <= 10000 , 1 <= k <= 10 数列中每个数的值不超过 1000

100% 的数据,2 <= n <= 1000000, 1 <= k <= 50 ,数列中每个数的值不超过 1000

输出格式

一个正整数,表示答案。

样例

输入数据 1

4 6
3 4 5 6

Copy

输出数据 1

3

Copy

样例解释

3 , 4 , 5 , 6 对 6 取模的结果分别为 3 , 4 , 5 , 0 能构成的数对有 (3,4)、(3,5)、(4,5),共 3 个

题解

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000005],b[100000],s=0;
int main(){   
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]=a[i]%m;
        for(int j=0;j<=a[i];j++)
        {
            s+=b[j];

        }
        b[a[i]]++;
    }
    cout<<s;
    return 0;
}

06.自制天平 

题目描述

小辉是一个实验爱好者。如下图,他自己动手制作了一个天平和重量分别为 a 、 b 、 c 的三种砝码各 4 枚。对天平来说,如果左右两边的重量相等,则天平便会平衡。因为是自制天平,所以使用没有“左物右码”的规定,也就是说无论砝码是放在左边还是右边、或者和称重物品一起放均是可以的。

那么,利用该天平和砝码,小辉最多能称出多少种非零重量出来呢?

输入格式

一行,三个正整数 a , b , c 。

数据范国

10% 的数据,a=b=c;

另 10 %的数据,b=c

100% 的数据,1<= a , b , c <= 100000

输出格式

一个正整数,为能称出的非零重量数

样例

输入数据 1

1 1 2

Copy

输出数据 1

16

Copy

样例解释

重量为 1 至 16 的重量都能称出来。

题解

#include<bits/stdc++.h>
using namespace std;
int s[5],n[1000001],ma=INT_MAX,ans;
int main(){
    cin>>s[0]>>s[1]>>s[2];
    for(int i=0;i<=4;i++)
    {
    	for(int j=0;j<=4;j++)
    	{
    		for(int k=0;k<=4;k++)
    		{
    			int a,s1=s[0]*i,s2=s[1]*j,s3=s[2]*k;
    			n[s1+s2+s3]=1;
    			n[abs(s1+s2-s3)]=1;
    			n[abs(s2+s3-s1)]=1;
    			n[abs(s1+s3-s2)]=1;
    		}
    	}
    }
	for(int i=1;i<=1000001;i++)
	{
		if(n[i]==1)ans++;
	}
	cout<<ans;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值