一、选择题(共150分,每题30分)
1 下面哪个密码最安全
A. 111111 B. 123456 C. qwerty D. Z2a8Q1
答案:D不解释。
2.如果今天是星期六,再过60天是星期几
A. 星期三 B. 星期四 C. 星期五 D. 星期六
答案:A。
分析:可利用周期。(6 + 60 % 7) % 7 = 3
3.90到100之间有几个素数
A. 0 B. 1 C. 2 D. 3
答案:B
分析:只有97一个数
4.下列几个32位IP地址中,书写错误的是
A. 162.105.128.2 B. 192.168.0.1 C. 256.256.129.1 D. 10.0.0.1
答案:C
分析:32位IP分成四个字节,每个字节是8位。8位二进制的范围是00000000~11111111,化成十进制就是0~255,超过此范围即为错。
5.下列4种不同进制表示的数中,数值最小的是
A. 八进制52 B. 十进制数44 C. 十六进制2F D. 二进制101000
答案:D
分析:52[8] = 42[10], 2F[16]=47[10], 101000[2]=40[2]
二、编程题(共250分,前三题每题50分,最后一题100分)
1.输入一个正整数N,如果N大于等于90输出A,如果N大于等于80且小于90输出B,如果N大于等于70且小于90输出C,如果N小于70输出D。
输入
70
输出
C
时间限制:1000ms
内存限制:65536KB
评分标准:
10分:能正确判断一组数据
20分:能正确判断两组数据
20分:能正确判断三组及三组以上数据
参考代码:
#include
using namespace std;
int main()
{
int n;
cin >> n;
if(n >= 90)
{
cout << 'A';
}
else if(n >= 80 && n < 90)
{
cout << 'B';
}
else if(n >= 70 && n < 80)
{
cout << 'C';
}
else if(n < 70)
{
cout << 'D';
}
return 0;
}
2.一个小球从n米高度自由落下,每次落地后反跳回原高度的一半,再落下。求第10次反弹多高,及初始落下到第10次反弹到最高点时(不含第十次落下距离)一共经历了多少米?
输入描述:输入一个正整数n
输出描述:(1)第10次反弹高度 (2)一共经历了多少米(不含第十次落下距离)
输入
1024
输出
1
3069
时间限制:1000ms
内存限制:65536KB
评分标准:
10分:能正确判断一组数据
20分:能正确判断两组数据
20分:能正确判断三组及三组以上数据
参考代码:
#include
using namespace std;
int main()
{
double n;
cin >> n;
double h = n;
for(int i = 1; i <= 10; i++)
{
n /= 2;
h += 2 * n;
}
h -= n;//减掉第十次从顶点落到地面的距离
cout << n << endl << h;
return 0;
}
3.输入10个正整数,以空格分隔,输出其中的最大值、最小值以及平均值,以逗号隔开
输入
1 2 3 4 5 6 7 8 9 10
输出
10,1,5.5
时间限制:1000ms
内存限制:65536ms
评分标准:
10分:能正确判断一组数据
20分:能正确判断两组数据
20分:能正确判断三组及三组以上数据
参考代码:
#include
#include
using namespace std;
int main()
{
int a;
int maxN = INT_MIN;
int minN = INT_MAX;
double sum = 0;
for(int i = 1; i <= 10; i++)
{
cin >> a;
if(a > maxN)
{
maxN = a;
}
if(a < minN)
{
minN = a;
}
sum += a;
}
cout << maxN << ',' << minN << ',' << sum / 10;
return 0;
}
4.输入n,输出1~n(包含1和n)之间所有的回文数,并统计回文数的个数。个数之前要加星号。
输入:
100
输出:
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
*18
时间限制:1000ms
内存限制:65536KB
评分标准:
20分:能正确输出一组回文数及个数
20分:能正确输出两组回文数及个数
20分:能正确输出三组回文数及个数
20分:能正确输出四组回文数及个数
20分:能正确输出五组回文数及个数
参考代码:
#include
using namespace std;
int main()
{
int n;
cin >> n;
int cnt = 0;
for(int i = 1; i <= n; i++)
{
int tmp = i;
int num = 0; //逆序的数
while(tmp)
{
num = num * 10 + tmp % 10;
tmp /= 10;
}
if(i == num)
{
cout << i << endl;
cnt++;
}
}
cout << '*' << cnt;
return 0;
}
了解信息学奥赛请加微信307591841(QQ同号)