这套题包含了历年真题,十分重要!!!要考试的同学可以参考一下!!希望能帮zhuyixia希望能帮助一下。
此套题限时3小时。
#GC4115. GC.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<bits/stdc++.h>
using namespace std;
int n,a[30]={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};
int main(){cin>>n;cout<<a[n-1];return 0;
}
#GC4117. GC.2022.五年级.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,z;
int main(){cin>>n>>m;z=__gcd(n,m);if(z==1){cout<<-1;}else {if(z%2==0){cout<<z/2;}else if(z%3==0){cout<<z/3;}}return 0;
}
#GC4118. GC.2022.五年级.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;
}
#GC4119. GC.2022.五年级.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;
int main(){long long n,m,a[1000005],t[100000],s=0;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+=t[j];}t[a[i]]++;}cout<<s;return 0;
}
#GC4120. GC.2022.五年级.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;
long long a,b,c,ans,s[2000005],m,s1,s2,s3;
int main()
{scanf("%lld %lld %lld",&a,&b,&c);for(int i=0;i<=4;i++){for(int j=0;j<=4;j++){for(int k=0;k<=4;k++){s1=i*a;s2=j*b;s3=k*c;m=s1+s2+s3;s[m]++;m=abs(s1-s2-s3);s[m]++;m=abs(s1+s2-s3);s[m]++;m=abs(s1+s3-s2);s[m]++;m=abs(s2+s3-s1);s[m]++;}}}for(int i=1;i<=4*(a+b+c);i++) if(s[i]!=0)ans++;printf("%lld",ans);return 0;
}
#GC4121. GC.2022.六年级.01.放球
题目描述
在一个无穷大的桌面上,一开始没有小球,现在小明从左往右放小球,重复如下步骤无穷次:
-
在当前所有小球的最右边放 R 个红球。
-
在当前所有小球的最右边放 B 个黑球。
你的任务是计算从左往右看,前面的 N 个小球当中,有多少个红色小球。
输入格式
3 个整数:N , R , B ( 1 <= N<= 10^{18}1018 , R >= 0 , B >=0 , R+B <= 10^{18}1018 )
输出格式
一个整数。
样例
输入数据 1
8 3 4
Copy
输出数据 1
4
Copy
输入数据 2
8 0 4
Copy
输出数据 2
0
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{long long a,b,c,d;cin>>a>>b>>c;long long k=a/(b+c);long long j=a%(b+c);if(j>=b){j=b;}cout<<k*b+j;return 0;
}
#GC4122. GC.2022.六年级.02.最小的数
题目描述
给定两个整数 X 和 K。每使用一次魔法,都会执行: X = |X - K|。即 X 会变成 X 与 K 的差的绝对值。你可以使用无数次魔法,也可以不使用魔法,目标是 X 最后的值最小。
输入格式
一行,两个整数 X 和 K ( 0 <= X <= 10^{18}1018 , 1 <= K <= 10^{18}1018 )。
输出格式
一个整数,表示最终可以得到的最小的 X 。
样例
输入数据 1
7 4
Copy
输出数据 1
1
Copy
输入数据 2
10000000000000000 1
Copy
输出数据 2
0
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{long long a,b;cin>>a>>b;cout<<min(a%b,b-a%b);return 0;
}
谢谢观看!!!
