赞
踩
目录
一、选择题
1、十进制数189转换成二进制是 (A)
A、10111101
B、11010011
C、11110000
D、11001100
2、定义一个整型变量int a,使用指针存储a的地址,下列选项正确的是(D)
A、int &p = &a
B、int **p = &a
C、int *p = a
D、int *p = &a
3、定义一个字符串数组: char a[1024] =“Welcome to China!":要计算上述字符串的长度,应该使用下列哪个函数(C)
A、 strcat()
B、 stremp()
C、 strlen()
D、 size()
4、己定义变量int a = 10, b = 0:
执行表达式((a = 5) || (b = 1)之后,a和b的值分别是( C)
A、10 0
B、5 1
C、5 0
D、10 1
5、运行下面程序,输出的结果是()
int func(int x, int y)
{
if(x ==1 && y == 1)return 1;
if(x < 0)return y;
if(y < 0)return x;
return (func(x,y-2) + func(x-2,y));
}
int main()
{
cout<<func(3,3);
return 0;
}
A、7 B、8 C、9 D、10
二、编程题
第一题
编程实现:与3有关的数
提示信息:
如果一个正整数的个位可以被3整除,则这个正整数与3有关
例如:
10的个位是0,0能被3整除,故10与3有关;
11的个位是1,1不能被3整除,故11与3无关
19的个位是9,9能被3整除,故19与3有关
题目描述:
给定一个正整数N(1<=Nm=10000),从小到大依次输出1到N之间所有与3有关的数
输入描述:输入一个正整数 (1<=N<=10000)
输出描述:输出一行,表示1到N之间(含1和N)所有与3有关的正整数,从小到大排列,正整数之间以一个空格隔开
样例输入:10
样例输出:3 6 9 10
第二题
编程实现:跳水比赛
题目描述:
某校有N名选手参加跳水比赛。每名选手比赛后,由6名裁判评分,选手的最终得分为6名裁判评分的总和。
比赛结束之后,请计算出最高分与最低分相差多少
例如:N=4,表示有4名选手
裁判对于这4名选手的打分是:
5 9 6 8 7 6
7 7 7 8 6 7
5 7 6 7 5 7
7 7 7 5 9 8
4名选手的最终分数分别为: 41,42,37,43,其中最高分是43分,最低分是37分,那么最高分和最低分相差了6分,故输出6。
输入描述:
第一行输入一个正整数N(2<=N<=100),表示参赛选手的人数
接下来输入N行,每行6个整数(0<=整数<=10),表示每个裁判的评分,整数之间以一个空格隔开
输出描述:
输出一个整数,表示最高分与最低分的差值
样例输入:
4
5 9 6 8 7 6
7 7 7 8 6 7
5 7 6 7 5 7
7 7 7 5 9 8
样例输出:
6
第三题
编程实现:密文解密
题目描述:
有一段密文,加密规律如下:
原文中所有的字符在字母表中的位置被左移了若干位(如:a左移一位后为z,A左移一位后为Z,f左移三位后为c......)
例如:密文为Ayz,已知加密时原文中的字母被左移了3位,解密后,原文是Dbc。
请根据这个规律,对密文进行解密。
输入描述
共两行
第一行输入一个只包含大小写字母的字符串(长度小于100),表示密文
第二行输入一个正整数n(1<=n<=100000),表示原文中的字母在字母表中的位置被左移的位数
输出描述
输出一个字符串,表示解密后的原文
样例输入:
Ayz
3
样例输出:
Dbc
解题思路:
1、这里需要记住 a对于的位置:97 z对于的位置:122 A对于的位置:65 Z对于的位置90
2、字符加减时,要采用printf()输出
#include<iostream>
#include<cstdio>
using namespace std;
int main ()
{
char a[100];
gets(a);
for(int i=0;a[i]!=0;i++)
{
if(a[i]+3>122&&a[i]>='a'&&a[i]<='z')
printf("%c",(a[i]+3-122-1+97));
else if(a[i]+3>90&&a[i]>='A'&&a[i]<='Z')
printf("%c",(a[i]+3-90-1+65));
else
printf("%c",a[i]+3);
}
}
4、编程实现:翻转游戏币
题目描述:
桌面上有n枚游戏币,均为反面朝上,编号依次为1到n。有n个人游戏币的数量与人的数量相等),首先第1个人将所有游戏币翻转,然后第2个人将所有编号是2的倍数的游戏币翻转,接下来第3个人将所有编号是3的倍数的游戏币翻转…以此类推,当最后一个人完成操作后,还有多少枚游戏币正面朝上?
例如:n=4
最初4枚游戏币的状态为:反反反反;经过第1个人翻转后,游戏币的状态为:正正正正;
经过第2个人翻转后,游戏币的状态为:正反正反
经过第3个人翻转后,游戏币的状态为:正反反反;
经过第4个人翻转后,游戏币的状态为:正反反正最后,还有两枚游戏币正面朝上,故答案为2
输入描述:
输入一个正整数n(3≤n≤10),表示游戏币数量及人的数量输出描述:
输出一个整数,表示最终游戏币正面朝上的数量
样例输入:
4
样例输出:
2
解题思路:
1、本题采用了布尔型数组解题。
2、解题程序如下:
#include<iostream>
using namespace std;
bool a[11];
int main ()
{
int n,b=0;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(j%i==0)
a[j]=!a[j];
}
for(int i=1;i<=n;i++)
{
if(a[i])
b+=1;
}
cout<<b;
}
5、编程实现:分发糖果
题目描述:
n个学生站成一排,已知每名学生的考试成绩,老师要根据成绩按以下规则分发糖果
1、每个学生至少得到一个糖果;
2、相邻两个学生中成绩高的会获得更多的糖果
3、相邻两个学生成绩即使相同,获得的糖果数量也可以不同
请计算出老师最少需要准备多少颗糖果?
例如:有3个学生,他们的考试成绩分别是70,50,80,可以给第一个学生2颗糖果,给第二个学生1颗糖果,给第三个学生2颗糖果,所以最少需要准备5颗糖果。
输入描述
共两行
第一行输入一个正整数n(1≤n≤20000),表示学生人数第二行输入n个整数(0≤整数≤100),表示每个学生的考试成绩,整数之间以一个空格隔开输出描述:
输出一个整数,表示最少需要准备的糖果数量
样例输入:
3
70 50 80
样例输出:
5#include<iostream>
using namespace std;
const int N=20000;
int a[N],b[N];
int main ()
{
int n,sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n-1;i++)
{
if(a[i]>a[i+1]&&b[i]==0&&b[i+1]==0)
{
b[i]+=2;
b[i+1]+=1;
}
else if(a[i]<a[i+1]&&b[i]==0&&b[i+1]==0)
{
b[i]+=1;
b[i+1]+=2;
}
else if(a[i]==a[i+1]&&b[i]==0&&b[i+1]==0)
{
b[i]+=1;
b[i+1]+=1;
}
else if(a[i]<a[i+1])
b[i+1]=b[i]+1;
else if(a[i]>a[i+1])
{
b[i+1]=1;
if(b[i]==b[i+1])
{
for(int j=i;j>=0;j--)
b[j]+=1;
}
}
else if(a[i]==a[i+1])
{
b[i+1]=b[i];
}
}
for(int i=0;i<n;i++)
{
sum+=b[i];
}
cout<<sum;
}
6、第六题
编程实现:区间最小值
题目描述:
给定n个整数,从1到n顺序编号,接下来进行m次查询,第i次查询第ai个数到第bi个数(包含ai和bi:)之间的最小值并输出。
例如:n =8,8个正整数依次为: 40 20 10 30 70 50 80 60
m= 3,3次查询分别为:
a1 = 3,b1 = 7
a2 = 1,b2 = 2
a3 = 5,b3 = 8
第一次查询:第3个数(10)到第7个数 (80)之间最小值是10:
第二次查询:第1个数(40)到第2个数(20)之间最小值是20;
第三次查询:第5个数(70)到第8个数 (60)之间最小值是50;
故输出
10
20
50.
输入描述
第一行输入两个整数n和m(1≤n,m≤108),分别表示整数的数量及查询次数
第二行输入n个整数(0≤整数≤105)
接下来m行,每行输入2个整数a和:(1≤ai≤bi≤n),分别表示查询的起始位置和终止位置
输出描述:
输出共m行,每行输出一个整数,分别表示每次查询得到的第ai个数到第bi个数之间(包含ai和bi)的最小值
样例输入:
8 3
40 20 10 30 70 50 80 60
3 7
1 2
5 8
样例输出:
10
20
50
代码如下:
#include<iostream>
using namespace std;
const int N=10000;
int w[N],a[N],b[N];
int main ()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=m;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=m;i++)
{
int min1=10000;
for(int j=a[i];j<=b[i];j++)
{
if(min1>w[j])
min1=w[j];
}
cout<<min1<<endl;
}
}
一、单选题
第 1 题 单选题
定义字符串 string a = “Hello C++”,下列选项可以获取到字符 ‘C’ 的是( )。
A.a[7]
B.a[6]
C.a[5]
D.a[4]
答案 B
第 2 题 单选题
下列选项中数值与其它项不同的是( )。
A.(1234)5
B.(302)8
C.(11000100)2
D.(c2)16
答案 C
第 3 题 单选题
定义变量 int i = 0, a,执行表达式 a = --i 后,i 和 a 的值分别是( )。
A.-1、0
B.0、-1
C.-1、-1
D.0、0
答案 C
第 4 题 单选题
定义数组 int a[10] = {4, 6, 1, 3, 8, 7, 2, 9, 0, 5},那么 *(a + 5) 的值是( )。
A.7
B.8
C.2
D.9
答案A
第 5 题 单选题
执行以下程序,输出的结果是( )。
int func( int x, int y, int z )
{
if( x == 1 || y == 1 || z == 1 ) return 1;
if( x < y && x < z )
return func( x, y - 1, z ) + func( x, y, z - 1 );
if( y < x && y < z )
return func( x - 1, y, z ) + func( x, y, z - 1 );
return func( x - 1, y, z ) + func( x, y - 1, z );
}
int main()
{
cout << func( 3, 3, 2 );
return 0;
}
A.5
B.6
C.7
D.8
答案 B
二、编程题
第 6 题 问答题
求和
题目描述:
给定 n 个整数,请计算出所有大于等于 10 的整数之和。
例如:n = 5,5 个整数分别为 10、20、4、30、9,其中大于等于 10 的整数有 10、20、30,它们的和为 60(10 + 20 + 30)。
输入描述:
共两行
第一行输入一个整数 n(1≤n≤1000)
第二行输入 n 个整数 Pi(1≤Pi≤100),整数之间以一个空格隔开输出描述:输出一个整数,表示所有大于等于 10 的整数之和
样例输入:
5
10 20 4 30 9
样例输出:
60
参考答案:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, s = 0;
cin >> n;
for (int i = 1, x; i <= n; i++) {
cin >> x;
if (x >= 10)
s += x;
}
cout << s;
return 0;
}
第 7 题 问答题
数位和为偶数的数
提示信息:
偶数:能被 2 整除的数。
数位和:一个整数中所有数位上的数字之和。
例如:整数 123,数位和是 6(1 + 2 + 3)。
题目描述:
给定一个整数 n,请找出 1 到 n 之间(包含 1 和 n)所有数位和为偶数的整数。
例如:n = 15,1 到 15 之间的整数为:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15;数位和依次为:1、2、3、4、5、6、7、8、9、1、2、3、4、5、6;
数位和为偶数的是:2、4、6、8、11、13、15。
输入描述:
输入一个整数 n(2≤n≤1000)
输出描述:
一行输出若干个整数,表示 1 到 n 之间(包含 1 和 n)所有数位和为偶数的数,并按照从小到大的顺序依次输出,整数之间以一个空格隔开
样例输入:
15
样例输出:
2 4 6 8 11 13 15
参考答案:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1, x, y; i <= n; i++) {
x = i;
y = 0;
while (x) {
y += x % 10;
x /= 10;
}
if (y % 2 == 0)
cout << i << " ";
}
return 0;
}
第 8 题 问答题
填涂颜色
题目描述:
给定一个由 n 行 m 列的小方格组成的矩阵图形,接下来对该图形进行如下操作:1、先选择其中 x 行,将其填成黄色;2、再选择其中 y 列,将其填成黄色;填色完成后,请统计出有多少个小方格未被填色。
例如:矩阵图形由 4 行 5 列的小方格组成,先选择第 2、4 行将其填色,再选择第 1、3、5 列将其填色。
填色完成后,有 4 个小方格未被填色。
输入描述:共三行
第一行输入 4 个整数 n,m,x,y,分别表示矩阵的行数和列数以及选择填色的行数和列数 (1≤x≤n≤10000,1≤y≤m≤10000),整数之间以一个空格隔开
第二行输入 x 个不同的整数(1≤整数≤n),表示被填色的行号,整数之间以一个空格隔开
第三行输入 y 个不同的整数(1≤整数≤m),表示被填色的列号,整数之间以一个空格隔开
输出描述:
输出一个整数,表示填色完成后未被填色的小方格数量
样例输入:
4 5 2 3
2 4
1 3 5
样例输出:
4
参考答案:
#include <bits/stdc++.h>
using namespace std;
const int N = 10002;
int col[N], row[N];
int main() {
int n, m, x, y;
cin >> n >> m >> x >> y;
int c = 0, r = 0;
for (int i = 1, a; i <= x; i++) {
cin >> a;
col[a]++;
if (col[a] == 1)
c++;
}
for (int i = 1, a; i <= y; i++) {
cin >> a;
row[a]++;
if (row[a] == 1)
r++;
}
cout << n * m - (c * m + r * n - c * r);
return 0;
}
第 9 题 问答题
外观数列
提示信息:
外观数列是一个整数序列,给定该数列的第一项数据之后,从第二项开始,每一项都是对前一项数据的描述。
例如:
给定外观数列的第一项为 1;
接下来第二项是对第一项数据的描述,即“一个 1”,记作 11;
第三项是对第二项数据的描述,即“两个 1”,记作 21;
第四项是对第三项数据的描述,即“一个 2,一个 1”,记作 1211;
第五项是对第四项数据的描述,即“一个 1,一个 2,两个 1”,记作 111221;以此类推…
题目描述:
给定外观数列的第一项 x 以及一个整数 n,请计算出该外观数列第 n 项的值。
例如:x = 2,n = 3,外观数列为:
2
12
1112
3112
132112
…
外观数列第 3 项为 1112。
输入描述:
输入两个整数 x(1≤x≤100)和 n(1≤n≤30)
输出描述:
输出一个整数,表示外观数列第 n 项的值
样例输入:
2 3
样例输出:
1112
参考答案:
#include <bits/stdc++.h>
using namespace std;
char x[10000], y[10000];
int main() {
int n, lx, t, k;
cin >> x >> n;
lx = strlen(x);
for (int i = 1; i < n; i++) {
t = 1, k = 0;
for (int i = 1; i <= lx; i++) {
if (x[i] != x[i - 1]) {
y[k] = t + '0';
y[k + 1] = x[i - 1];
k += 2;
t = 1;
} else {
t++;
}
}
lx = k;
memcpy(x, y, sizeof(y));
memset(y, 0, sizeof(y));
}
cout << x;
return 0;
}
26
第 10 题 问答题
删除数字
题目描述:
老师在黑板上写了一个不超过 500 位的正整数 n(1≤n<10500),要求同学们删除其中任意 k 个数字, 剩余数字的顺序不变,希望得到的数最大。
例如:n = 69134,k = 2,从 69134 中删除 2 个数字,将第一位 6 和第三位 1 删除,得到的新数 934 是最大的。
输入描述:
输入两个整数 n 和 k(1≤n<10500,0≤k<n的位数),整数之间以一个空格隔开
输出描述:
输出一个整数,表示删除 k 个数字后,得到的最大数
样例输入:
69134 2
样例输出:
934
参考答案:
#include <bits/stdc++.h>
using namespace std;
string n;
int main() {
int k;
cin >> n >> k;
while (k--) {
int i, ln = n.size();
for (i = 1; i < ln; i++) {
if (n[i] > n[i - 1]) {
n.erase(i - 1, 1);
break;
}
}
if (i == ln)
n.erase(ln - 1, 1);
}
cout << n;
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。