第十三届蓝桥杯大赛软件赛决赛C组C++

 试题 A: 斐波那契与 7

本题总分:5 分 【问题描述】 斐波那契数列的递推公式为:Fn = Fn−1 + Fn−2,其中 F1 = F2 = 1。 请问,斐波那契数列的第 1 至 202202011200 项(含)中,有多少项的个位 是 7。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


 

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
    long long int t=2022020112;
    long long int ans=t*13;
    ans = ans + (t - 1) / 3 + 1;
    cout<<ans<<endl;
}
规律是每隔100会按照14 13 13的规律增加所以先*13在加一 

答案是26960268160   已经除了100不用加两零,考试时傻了,白给一题

试题 B: 小蓝做实验

本题总分:5 分 【问题描述】 小蓝很喜欢科研,他最近做了一个实验得到了一批实验数据,一共是两百 万个正整数。如果按照预期,所有的实验数据 x 都应该满足 107 ≤ x ≤ 108。但 是做实验都会有一些误差,会导致出现一些预期外的数据,这种误差数据 y 的 范围是 103 ≤ y ≤ 1012 。由于小蓝做实验很可靠,所以他所有的实验数据中 99.99% 以上都是符合预期的。小蓝的所有实验数据都在 primes.txt 中,现 在他想统计这两百万个正整数中有多少个是质数,你能告诉他吗? 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#include<bits/stdc++.h>
using namespace std;
bool isPrime(long long int x){
	for(long long int i=2; i*i<=x;i++){
		if(x%i==0){
			return false;
		}
	}
	return true;
}
int main(){
	int ans=0;
	freopen("primes.txt","r",stdin);
	long long int tmp=0;
	while(cin>>tmp){
		cout<<tmp<<endl;
		if(isPrime(tmp)){
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

结果: 342693

试题 C: 取模

时间限制: 1.0s 内存限制: 256.0MB 本题总分:10 分 【问题描述】 给定 n, m ,问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x = n mod y 。 【输入格式】 输入包含多组独立的询问。 第一行包含一个整数 T 表示询问的组数。 接下来 T 行每行包含两个整数 n, m,用一个空格分隔,表示一组询问。 【输出格式】 输出 T 行,每行依次对应一组询问的结果。如果存在,输出单词 Yes;如 果不存在,输出单词 No。 【样例输入】 3 1 2 5 2 999 99 【样例输出】 No No Yes 【评测用例规模与约定】 对于 20% 的评测用例,T ≤ 100 ,n, m ≤ 1000; 试题 C: 取模 4 第十三届蓝桥杯大赛软件赛决赛 C/C++ 大学 C 组 对于 50% 的评测用例,T ≤ 10000 ,n, m ≤ 105; 对于所有评测用例,1 ≤ T ≤ 105 ,1 ≤ n ≤ 109 ,2 ≤ m ≤ 109。

#include<iostream>
using namespace std;
int T,n,m;
bool is(int n,int m){
	for(int i=1;i<=m;i++){
		for(int j=i+1;j<=m;j++){
			if(n%i==n%j){
				return 1;
			}
		}
	}
	return 0;
}
int main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		if(is(n,m)){
			cout<<"Yes"<<endl;
		}else{
			cout<<"No"<<endl;
		}
	}
	return 0;
}

试题 D: 内存空间

时间限制: 1.0s 内存限制: 256.0MB 本题总分:10 分 【问题描述】 小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。 为了简化问题,变量的类型只有以下三种: int:整型变量,一个 int 型变量占用 4 Byte 的内存空间。 long:长整型变量,一个 long 型变量占用 8 Byte 的内存空间。 String:字符串变量,占用空间和字符串长度有关,设字符串长度为 L, 则字符串占用 L Byte 的内存空间,如果字符串长度为 0 则占用 0 Byte 的内存 空间。 定义变量的语句只有两种形式,第一种形式为: type var1=value1,var2=value2…; 定义了若干个 type 类型变量 var1、var2、…,并且用 value1、value2 …初始化, 多个变量之间用’,’ 分隔,语句以’;’ 结尾,type 可能是 int、long 或 String。例如 int a=1,b=5,c=6; 占用空间为 12 Byte;long a=1,b=5; 占用空间为 16 Byte;String s1=””,s2=”hello”,s3=”world”; 占用空 间为 10 Byte。 第二种形式为: type[] arr1=new type[size1],arr2=new type[size2]…; 定义了若干 type 类型的一维数组变量 arr1、arr2…,且数组的大小为 size1、size2…,多个变量之间用’,’ 进行分隔,语句以’;’ 结尾,type 只可 能是 int 或 long。例如 int[] a1=new int[10]; 占用的内存空间为 40

试题 D: 内存空间 6 第十三届蓝桥杯大赛软件赛决赛C/C++大学C组 Byte;long[] a1=new long[10],a2=new long[10]; 占用的内存空间为 160 Byte。 已知小蓝有 T 条定义变量的语句,请你帮他统计下一共占用了多少内 存空间。结果的表示方式为:aGBbMBcKBdB,其中 a、b、c、d 为统计的 结果,GB、MB、KB、B 为单位。优先用大的单位来表示,1GB=1024MB, 1MB=1024KB,1KB=1024B,其中 B 表示 Byte。如果 a、b、c、d 中的某几个 数字为 0,那么不必输出这几个数字及其单位。题目保证一行中只有一句定义 变量的语句,且每条语句都满足题干中描述的定义格式,所有的变量名都是合 法的且均不重复。题目中的数据很规整,和上述给出的例子类似,除了类型后 面有一个空格,以及定义数组时 new 后面的一个空格之外,不会出现多余的空 格。 【输入格式】 输入的第一行包含一个整数 T ,表示有 T 句变量定义的语句。 接下来 T 行,每行包含一句变量定义语句。

【输出格式】 输出一行包含一个字符串,表示所有语句所占用空间的总大小。 【样例输入 1】 1 long[] nums=new long[131072];

【样例输出 1】 1MB 【样例输入 2】 4 int a=0,b=0; long x=0,y=0; String s1=”hello”,s2=”world”; 试题D: 内存空间 7 第十三届蓝桥杯大赛软件赛决赛 C/C++ 大学 C 组 long[] arr1=new long[100000],arr2=new long[100000];

【样例输出 2】 1MB538KB546B 【样例说明】 样例 1,占用的空间为 131072 × 8 = 1048576 B,换算过后正好是 1MB,其 它三个单位 GB、KB、B 前面的数字都为 0 ,所以不用输出。 样例 2,占用的空间为 4 × 2 + 8 × 2 + 10 + 8 × 100000 × 2 B,换算后是 1MB538KB546B。 【评测用例规模与约定】 对于所有评测用例,1 ≤ T ≤ 10,每条变量定义语句的长度不会超过 1000 。所有的变量名称长度不会超过 10,且都由小写字母和数字组成。对于整型变 量,初始化的值均是在其表示范围内的十进制整数,初始化的值不会是变量。 对于 String 类型的变量,初始化的内容长度不会超过 50,且内容仅包含小写 字母和数字,初始化的值不会是变量。对于数组类型变量,数组的长度为一个 整数,范围为:[0, 2 30],数组的长度不会是变量。T 条语句定义的变量所占的内 存空间总大小不会超过 1 GB,且大于 0 B。

试题 E: 斐波那契数组

时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分 【问题描述】 如果数组 A = (a0, a1, · · · , an−1) 满足以下条件,就说它是一个斐波那契数 组: 1. n ≥ 2; 2. a0 = a1; 3. 对于所有的 i(i ≥ 2),都满足 ai = ai−1 + ai−2。 现在,给出一个数组 A ,你可以执行任意次修改,每次修改将数组中的某 个位置的元素修改为一个大于 0 的整数。请问最少修改几个元素之后,数组 A 会变成一个斐波那契数组。

【输入格式】 输入的第一行包含一个整数 n ,表示数组 A 中的元素个数。 第二行包含 n 个整数 a0, a1, · · · , an−1,相邻两个整数之间用一个空格分隔。

【输出格式】 输出一行包含一个整数表示最少需要修改数组 A 中的几个元素之后,数组 A 可以变为一个斐波那契数组。

【样例输入】 5 1 2 2 4 8

【样例输出】 3

试题 E: 斐波那契数组 9 第十三届蓝桥杯大赛软件赛决赛 C/C++ 大学 C 组 【样例说明】 将原数组修改为 (1, 1, 2, 3, 5),最少修改三个元素变成了一个斐波那契数组。 【评测用例规模与约定】 对于所有评测用例,2 ≤ n ≤ 105 ,1 ≤ ai ≤ 106。

#include<iostream>
using namespace std;
int cnt[100000];
int num[100000];
int n;
int f[100000];
int main(){
	//生成数列 
	cin>>n;
	f[0]=1;
	f[1]=1;
	for(int i=2;i<n;i++){
		f[i]=f[i-1]+f[i-2];
	}
//	接下来判断该数列与哪个斐波那契数列最接近,即找出现次数最多的a0
 //因为菲波那切数组本质上就是菲波那切数列都乘a0
 //输入数据
	for(int i=0;i<n;i++){
		cin>>num[i];
	}
		int maxa0=0;
		//统计maxa0;
		int a0=0;
		for(int i=0;i<n;i++){
			if(num[i]%f[i]==0){  //判断能不能整除
				int a=num[i]/f[i];
				//求a0
				cnt[a]++;
				if(cnt[a]>maxa0){
					maxa0=cnt[a];
					a0=a;
				}
			}
		}
		//求最少修改次数    检查题目给的数组有多少需要修改的
		int ans=0;
		for(int i=0;i<n;i++){
			if(num[i]!=f[i]*a0){
				ans++;
				}
			}
	cout<<ans<<endl;
}

/*
这个是 a0、a0、2a0、3a0,那不就是相当于是1 1 2 3*a0,也就是斐波那契数列*a,然后题目让你把他变成菲波那切数列
然后要修改最少的就是说大部分尽量别动,所以你就让题目给你的数组,对应除以菲波那切数列里的那一项,除完得到的就是a0
统计一下哪个a出现次数最多说明乘这个a得到的数组,改变的数就能相对少一点,但前提必须整除
*/

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值