首页 > 编程语言 >C++三级抽测题目(答案+题目)

C++三级抽测题目(答案+题目)

时间:2024-11-22 12:42:37浏览次数:3  
标签:输出 题目 10 int C++ 填空 抽测 回文

今天我给大家出一套C++三级考题

限时1.5小时,大家加油!!!

题目1:回文数

回文数题目描述

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个十进制数 56 ,将 56 加 65 (即把 56 从右向左读),得到 121 是一个回文数。

又如:数87:

STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884

在这里的一步是指进行了一次加法,上例最少用了 4 步得到回文数 4884 。

写一个程序,给定一个数 M ,求最少经过几步可以得到回文数。如果在 30 步以内(包含 30 步)不可能得到回文数,则输出 Impossible! 。

输入格式

一个整数 M ( 0 < M < {10}^{12}1012 )。

输出格式

如果能在 30 步以内得到回文数,输出步数

否则输出 Impossible!。

样例

输入数据 1

87

输出数据 1

4

题目2:素质考核

题目描述

一年一度的士兵素质考核即将开始了,每个郡都会选出部分士兵,到中心城参加考核,为了公平,距离中心城越远的地方,可以越早进入中心城,以缓解旅途的疲劳。中央城的士兵不需要参加考核,即中心城参加考核人数为 0 。

输入n个整数,表示每个郡参加考核的士兵人数, n 为奇数,第一个数和最后一个数表示距离中央城最远的两个郡,以此类推,中间的数为 0 ,表示中央城参与考核人数为0。

要求输出每天累计到达中央城的士兵人数。

输入格式

第 1 行 1 个整数 n(奇数),范围在 [1,100000]。

第 2 行有 n 个 [1,10000] 范围的整数,整数间用一个空格分隔。

输出格式

( N - 1 ) / 2 个 整数。

样例

输入数据 1

9
4 2 5 1 0 3 1 5 7

输出数据 1

11 18 24 28

题目3: 有序数组的合并

题目描述

输入两个正整数 N 和 M ,输入 N 个数放到 a 数组里面,输入 M 个数放到b数组里面,a ,b 数组都为从小到大排序的数组,要求把两个数组合并,并使新的数组仍然是有序的,输出新数组。

输入格式

第 1 行 2 个正整数:N,M,范围在 [1,8000000]。

第 2 行 N 个可以相同的正整数:范围在 [1,8000000]。

第 3 行 M 个可以相同的正整数:范围在 [1,8000000]。

输出格式

一行, N+M 个数,为合并后的数组。

样例

输入数据 1

5 4
1 3 5 7 9
2 4 6 8

输出数据 1

1 2 3 4 5 6 7 8 9

程序填空

#include<bits/stdc++.h>
using namespace std;
int n,m,a[8000001],b[8000001],c[16000001];
int main()
{
	scanf("%d %d",&n,&m);
	int i,j,k,l;
	
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
		
	for(i=1;i<=m;i++)
		scanf("%d",&b[i]);

	k=1;
	for(i=1,j=1;i<=n&&j<=m;k++) 
	{ 
		if(a[i]<=b[j])
		{
			c[k] = a[i];
			i++; 
		}
		else
		{
			c[k] = b[j];
			填空(1) ;
		}
	}


	//如果 a[n]<=b[m],那么i指针会先到达 n ,否则j指针会先到达 m
	//这意味着还有一些数据没有搬到 c 数组 

	if(填空(2))
	{
		for(l=i;l<=n;l++,k++)
			c[k] = a[l];
	}
	else
	{
		for(l=j;填空(3);l++,k++)
			c[k] = b[l];
	}

	for(i=1;i<k;i++) // k = n + m + 1 
		printf("%d ",c[i]); 

	return 0;
}

填空(1): 

填空(2): 

填空(3): 

题目4:所有奇数长度子数组的和

题目描述

给你一个正整数数组 a ,请你计算所有可能的奇数长度子数组的和。

子数组的定义为:原数组中的一个连续子序列。

请你输出数组 a 中所有奇数长度子数组的和。

输入格式

第 1 行:1 个正整数 N,不超过 10000 。

第 2 行:N 个整数,范围 [1,10000] 。

输出格式

输出一个整数。

样例

输入数据 1

5
1 4 2 5 3

输出数据 1

58

样例解释

所有奇数长度子数组和它们的和为:

[1] = 1

[4] = 4

[2] = 2

[5] = 5

[3] = 3

[1,4,2] = 7

[4,2,5] = 11

[2,5,3] = 10

[1,4,2,5,3] = 15

我们将所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58

题目5:美人松的高度美人松的高度

题目描述

又到过年了,狗熊岭的动物们都忙碌了起来,张灯结彩准备过年。李老板却要光头强砍一些百年美人松回去。现在光头强看到丛林里有N棵美人松,当然每棵松的高度是已知的。李老板要问光头强:高度为K的美人松有多少棵?

输入格式

第一行一个正整数N, 1 <= N <= 1000000 。

第二行 N 个正整数,之间用一个空格隔开,表示N棵美人松的高度,1<=高度<=1000000。

第三行一个正整数 K ,表示询问高度为 K 的美人松有多少棵。

输出格式

一行一个整数,表示对应高度为K的树的数量,如果没有则输出0。

样例

输入数据 1

5
3 4 5 2 3
3

输出数据 1

2

题目6:单词删除

题目描述

给你一个单词,在句子中删除所有的这个单词。

输入格式

两行

第 1 行为一个单词

第 2 行为包含若干个该单词的句子。

输出格式

输出 1 行,为删除单词后的句子。

样例

输入数据 1

bc
abc akg abc jiklabc asdfabckjo;

输出数据 1

a akg a jikla asdfakjo;

程序填空

#include<bits/stdc++.h>
using namespace std;
string s,str; 
int main(){

	int len;
	cin>>s; //输入单词
	填空(1) ; //用 getchar() 接收一个字符(第一行单词后尾的换行符) 
	getline(cin,str); //用getline()读取句子,存放在str中 
	
	len = 填空(2).size(); //获取单词长度
	while(str.find(s)!= 填空(3) )
	{
		str. 填空(4) (str.find(s), 填空(5) ); //在查找到单词的首位置开始,删除一个单词长度的单词 
	} 
	
	cout<<str;
	 
    return 0;
}

填空(1) : 

填空(2) : 

填空(3) : 

填空(4) : 

填空(5) : 

题目7:猴子选大王

题目描述

n 只猴子要选大王,选举方法如下:所有猴子按 1 , 2 , ... , n 编号并按照顺序围成一圈,从第 k 个猴子起,由 1 开始报数,报到 m 时,该猴子就跳出圈外,下一只猴子再次由 1 开始报数,如此循环,直到圈内只剩下一只猴子时,这只猴子就是大王。

输入格式

三个整数,猴子总数 n ( n < 1000 ),起始报数的猴子编号为 k ,出局数字为 m( m < 100 )

输出格式

猴子大王的编号。

样例

输入数据 1

10 5 3

输出数据 1

8

题目8: 回文日期

题目描述

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的 8 位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。

一个 8 位数字是回文的,当且仅当对于所有的 i ( 1 <= i <= 8 ) 从左向右数的第 i 个 数字和第 9-i 个数字(即从右向左数的第 i 个数字)是相同的。

例如:

  1. 对于 2016 年 11 月 19 日,用 8 位数字 20161119 表示,它不是回文的。

  2. 对于 2010年 1 月 2 日,用 8 位数字 20100102 表示,它是回文的。

  3. 对于 2010 年 10 月 2 日,用 8 位数字 20101002 表示,它不是回文的。

每一年中都有 12 个月份:

其中, 1、3、5、7、8、10、12 月每个月有 31 天; 4、6、9、11 月每个月有 30 天;而对于 2 月,闰年时有 29 天,平年时有 28 天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

  1. 这个年份是 4 的整数倍,但不是 100 的整数倍;

  2. 这个年份是 400 的整数倍。

例如:

  • 以下几个年份都是闰年: 2000、2012、2016。

  • 以下几个年份是平年: 1900、2011、2014。

输入格式

输入包括两行,每行包括一个 8 位数字。

第 1 行表示牛牛指定的起始日期 data_1data1​。

第 2 行表示牛牛指定的终止日期 data_2data2​。

保证 date_1date1​ 和 date_2date2​ 都是真实存在的日期,且年份部分一定为 4 位数字,且首位数字不为 0 。

保证 date_1date1​ 一定不晚于 date_2date2​ 。

输出格式

输出一行,包含一个整数,表示在 date_1date1​ 和 date_2date2​ 之间,有多少个日期是回文的。

样例

输入数据 1

20110101
20111231

输出数据 1

1

样例说明

符合条件的日期是20111102。

提示

枚举后面四位(月份+日期)会更快。

枚举后四位然后求出整个日期,判断是否在范围内即可。

2 月不需要判断是否是闰年,因为 0229 反过来是 9220 ,整个日期是 92200229 ,而 9220 年是闰年。

题目1答案:

代码

#include<bits/stdc++.h>
using namespace std;
long long a,i;
int main(){
    scanf("%lld",&a);
    long long k=a,l=0;
    while(k!=0)
    {
        l=l*10+k%10;
        k=k/10;
    }
    if(l==a)
    {
        cout<<i;
        return 0;
    }
    for(i=1;i<=30;i++)
    {
        k=a,l=0;
    	while(k!=0)
    	{
        	l=l*10+k%10;
        	k=k/10;
    	}
    	a=a+l;
    	k=a,l=0;
    	while(k!=0)
    	{
        	l=l*10+k%10;
         	k=k/10;
    	}
    	if(l==a)
    	{
        	cout<<i;
        	return 0;
    	}
    }
    cout<<"Impossible!";
    return 0;
}

题目2答案: 

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[100001],l;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
    	scanf("%d",&a[i]);
    }
	for(int i=1,j=n;i<j;i++,j--)
	{   
        l=l+a[j]+a[i];	
		printf("%d ",l);
    }
	return 0;
}

题目3答案: 

代码

'1': j++
'2': i<=n
'3': l<=m

题目4答案: 

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    long long a,b[10005],n;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        scanf("%lld",&a);
        b[i]=b[i-1]+a;
    }
    long long s=0;
    for(int i=1; i<=n; i+=2)
	{
        for(int l=1; l<=n-i+1; l++)
		{
            int r=l+i-1;
            s+=b[r]-b[l-1];
        }
    }
    cout<<s;
	return 0;
}

题目5答案: 

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[1000005],c,y=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    cin>>c;
    for(int i=0;i<n;i++)
    {
        if(a[i]==c)
        {    
            y++;
        }
    }
    cout<<y;
    return 0;
}

题目6答案: 

代码

'1': getchar()
'2': s
'3': '-1'
'4': erase
'5': len

题目7答案: 

代码

#include<bits/stdc++.h>
using namespace std;
bool a[101];
main()
{
	int n,m,k,s;
	int num=0,i,cnt=0;
	cin>>n>>k>>m;
	for(i=k;num<n;i++)
	{
		if(i==n+1)
		{
			i=1 ;
		}
		if(a[i])
		{
			continue;
		}
		cnt++;
		if(cnt==m&&!a[i])
		{
			s=i;
			a[i]=true;
			cnt=0;
			num++;
		}
	}
	printf("%d",s);
	return 0;
}

题目8答案:

代码

#include<bits/stdc++.h>
using namespace std;
int i,j,m,n,a,b,c,sum,ans;
int s[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int p(int i,int j)
{ 
        int q,sum;
        q=(j%10)*1000+(j/10)*100+(i%10)*10+(i/10);
        sum=q*10000+i*100+j;
        return sum;
}
int main()
{
	cin>>a>>m;
	for(int i=1;i<=12;i++)
    {
		for(int j=1;j<=s[i];j++)
        {
            c=p(i,j);
            if(c>=a&&c<=m)
            {
                ans++;            
            }
        }
    }
	printf("%d",ans);
    return 0;
}

标签:输出,题目,10,int,C++,填空,抽测,回文
From: https://blog.csdn.net/zhangguanghao9/article/details/143969978

相关文章

  • C++:模拟实现unordered_map和unordered_set
    目录一.unordered_set和unordered_set二.哈希表的改造三.整体代码1.MyUnorderedMap.h2.MyUnorderedSet.h3.HashTable.h4.Hash.cpp一.unordered_set和unordered_setunordered_set和unordered_map的实现通过调用哈希表即可#pragmaonce#include"HashTable.h"using......
  • C++AVL平衡树
    1.AVL平衡树节点定义每一个节点都配左右孩子和父节点,以及平衡因子和其所对应的值。template<classK,classV>structAVLTreeNode{ //需要parent指针,后续更新平衡因子可以看到 pair<K,V>_kv; AVLTreeNode<K,V>*_left; AVLTreeNode<K,V>*_right; AVLTreeNode<K......
  • QT 线程 QThread QT5.12.3环境 C++实现
    一、线程  QT主线程称为GUI线程,负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。如果把一些比较复杂或者费时的操作放在主线程中,界面就会出现卡顿或者无响应的现象。一般主线程负责影响界面上的操作,子线程负责负责费时的数据处理。二、使用多线程有什么好......
  • QT基础 编码问题 定时器 事件 绘图事件 QT5.12.3环境 C++实现
    一、编码问题        在计算机编程中,流(Stream)是一种抽象的概念,用于表示数据的输入或输出。根据处理数据的不同方式,流可以分为字节流(ByteStream)和字符流(CharacterStream)两大类。1.字节流(ByteStream)        字节流是处理数据的基本单位是字节(8位二进制数......
  • QT基础 窗体 对话框 文件 QT5.12.3环境 C++实现
    一、堆栈窗体1.概念是一种界面设计思路,多个窗体重叠在一起,通过点击对应的按钮,显示对应的界面。2.相关方法PublicFunctions  QStackedWidget(QWidget*parent=0)  //stack如果单纯指定父窗口,但是没有指定大小,那么是不显示的  intaddWidget(QWidget*......
  • 2025年AMC8数学竞赛的考试题目难度会增加吗?-季遇教育
      2025年AMC8数学竞赛的考试题目难度会增加吗?这无疑是众多备考同学心头萦绕的关键问题。新赛季的AMC8数学竞赛已确定将于2025年1月23日正式拉开帷幕,对于那些怀揣着在竞赛中取得优异成绩梦想、想要备考AMC8竞赛的同学们而言,此刻必须迅速行动起来,投入到紧张的备考之中! ......
  • Codeforces 55 题目分析
    本文将对Codeforces55(BetaRound51)进行分析。A题目描述:一个虫子位于绕城一圈的\(n\)片树叶中的一片上,在第\(k\)分钟,虫子会跳过\(k−1\)片树叶并在脚下的树叶上做一个记号。你的任务是判断该虫子是否将\(n\)片树叶都做了记号。解题思路:直接模拟即可。代码:#......
  • 【C++】右值引用与移动语义详解:如何利用万能引用实现完美转发
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriority......
  • java题目集4-6总结
    一、前言概括:经过了三次java的大作业的练习,也算是深入java了。这三次大作业的难度是层层递进的,虽然一次比一次难,但是每一次大作业都是基于前面大作业的知识点。所以每一次大作业认真完成,并认真总结知识点,多花点时间,大作业还是勉强可以完成。1.知识点:大作业4:大作业四还是答题......
  • 【c++丨STL】priority_queue(优先级队列)的使用与模拟实现
    ......