今天我给大家出一套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 个数字)是相同的。
例如:
-
对于 2016 年 11 月 19 日,用 8 位数字 20161119 表示,它不是回文的。
-
对于 2010年 1 月 2 日,用 8 位数字 20100102 表示,它是回文的。
-
对于 2010 年 10 月 2 日,用 8 位数字 20101002 表示,它不是回文的。
每一年中都有 12 个月份:
其中, 1、3、5、7、8、10、12 月每个月有 31 天; 4、6、9、11 月每个月有 30 天;而对于 2 月,闰年时有 29 天,平年时有 28 天。
一个年份是闰年当且仅当它满足下列两种情况其中的一种:
-
这个年份是 4 的整数倍,但不是 100 的整数倍;
-
这个年份是 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