前言
马上考试了(瘫)
题目
1.等级成绩
描述
输入某一位同学的成绩,将其转换为五进制。即小于60分为E,60-69为D,70-79为C,80-89为B,90分以上为A。
输入
输入一位整数
输出
按要求输出相应的等级制。如果输入数据非法(<0或>100),输出-1。
例
输入:89
输出:B
输入:101
输出:-1
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
int n;
cin >> n;
if (n < 60 && n >= 0)
{
cout << "E";
}
else if (n >= 60 && n < 70)
{
cout << "D";
}
else if (n >= 70 && n < 80)
{
cout << "C";
}
else if (n >= 80 && n < 90)
{
cout << "B";
}
else if (n >= 90 && n <= 100)
{
cout << "A";
}
else
{
cout << "-1";
}
return 0;
}
提示
解析
2.素数
描述
输入两个正整数a,b(int范围内),计算二者之间的所有素数。
输入
两个整数a和b,保证在int类型的表示范围。
输出
输出两个整数之间的所有素数(包含这两个整数),五个一行输出。
例
输入:
1 20
输出:
2 3 5 7 11
13 17 19
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
int main()
{
int n, m, a = 0, t, i, flag;
cin >> n >> m;
if (n > m)
swap(n, m);
if (n == 1)
n = 2;
for (t = n; t <= m; t++)
{
flag = 0;
for (i = 2; i * i <= t; i++)
{
if (t % i == 0)
flag = 1;
}
if (flag == 0)
{
cout<<t<<" ";
a++;
if (a % 5 == 0)
printf("\n");
}
}
return 0;
}
提示
解析
3.判断一个数字能否被6整除
描述
给定一个较长的整数(>50位),判断它能否被3整除。
输入
一个整数,数据范围已经超出了int、long、long long的表示范围。长度不超过200位
输出
如果数字是3的倍数,输出Yes,否则输出No
例
输入:
12
输出:
Yes
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
int sum = 0;
char b[256];
char* p = b;
cin >> b;
while (*p == '-')
{
p++;
}
while (*p)
{
sum += *p - '0';
p++;
}
if (sum % 3 == 0)
{
cout << "Yes";
}
else
{
cout << "No";
}
return 0;
}
提示
解析
4.逆序
描述
设计递归函数,对给定的正整数进行逆序。
输入
正整数n
输出
逆序后的正整数
例
输入:
123
输出:
321
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
void f(int n)
{
if (n<=0)
{
return;
}
else
{
printf("%d", n % 10);
n = n / 10;
f(n);
}
}
int main()
{
int n;
scanf("%d", &n);
f(n);
return 0;
}
提示
解析
5.最大元素与最小元素的差
描述
计算一个数组中最大元素与最小元素的差
输入
第一行输出n,代表数组中元素的个数,n<100
接下来一行输入n个数
输出
数组中最大值与最小值的差
例
输入:
5
1 2 3 4 5
输出:
4
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 100
int compute(int a[], int n, int* pmin, int* pmax)
{
int i;
*pmax = *pmin = a[0];
for (i = 1; i < n; i++)
{
if (a[i] > *pmax)
{
*pmax = a[i];
}
if (*pmin > a[i])
{
*pmin = a[i];
}
}
return 0;
}
int main()
{
int n, i, a[N];
int minValue, maxValue;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
compute(a, n, &minValue, &maxValue);
printf("%d", maxValue - minValue);
return 0;
}
提示
解析
6.结构体操作
描述
学生的信息由姓名(不超过20个字符)、性别、年龄、C语言成绩、数学成绩、英语成绩组成,输入若干同学的基本信息,按平均分数降序排序,最后输出基本信息(如果平均分数相同,按输入的顺序输出)。
输入
第一行代表学生的人数n(n<100);
接下的n行中,每一行输入姓名、性别(m或f),年龄,C语言成绩、数学成绩、英语成绩三门功课的成绩(整数)
输出
按平均分由高到低排序,依次输出学生的相关信息。
例
输入:
2
zhang m 21 90 90 90
li f 19 94 95 97
输出:
li f 19 94 95 97
zhang m 21 90 90 90
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
struct student
{
string name, xb;
int age;
int yw, sx, yy;
int sum;
};
student a[110];
int n;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].name;
cin >> a[i].xb;
cin >> a[i].age;
cin >> a[i].yw >> a[i].sx >> a[i].yy;
a[i].sum = a[i].yw + a[i].sx + a[i].yy;
}
for (int i = n - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (a[j].sum < a[j + 1].sum)
{
swap(a[j], a[j + 1]);
}
}
}
for (int i = 0; i < n; i++)
{
cout << a[i].name << " " << a[i].xb << " " << a[i].age<<" "<<a[i].yw<<" "<<a[i].sx<<" "<<a[i].yy << endl;
}
return 0;
}
提示
在构造的结构体类型中,增加平均分数。
解析
7.二分法
描述
方程f(x)=2x3−4x2−18x+36,试用二分法计算f(x)=0f(x)=0在(a,b)(a,b)之间的根。
输入
输入两个整数a和b,保证f(a)f(b)<0。
输出
用二分法计算出f(x)=0f(x)=0在区间内的根,结果保留6位小数。
例
输入:
1.9 2.2
输出:
2.000000
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
double fc(double x)
{
double ret;
ret = 2 * x * x * x - 4 * x * x - 18 * x + 36;
return ret;
}
int main()
{
double a, b, x, y1, y2, y;
cin>>a>>b;
y1 = fc(a);
y2 = fc(b);
x = (b + a) / 2;
y = fc(x);
while (y1 * y2 < 0)
{
x = (b + a) / 2;
y = fc(x);
if (y * y1 < 0)
{
b = x;
y2 = y;
}
else if (y * y2 < 0)
{
a = x;
y1 = y;
}
else if (0 == y)
{
break;
}
}
printf("%.6lf", x);
return 0;
}
提示
解析
8.鞍点计算
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1≤m,n≤10。同一行和同一列没有相同的数。
输入
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
输出
按下列格式输出鞍点:
Array[i][j]=x
其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
例
输入:
3 3
1 2 3
4 5 6
7 8 9
输出:
Array[0][2]=3
输入:
4 5
65 85 18 85 91
98 23 93 18 80
70 79 2 12 77
22 12 96 22 41
输出:
None
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 100
int a[N][N];
int Min(int a[][N], int m, int n, int r)
{
int i, p = 0;
for (i = 0; i < m; i++)
{
if (a[p][r] > a[i][r])
p = i;
}
return p;
}
int main()
{
int m, n, i, j;
cin >> m >> n;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
int max, r = 0, c, num = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (a[i][r] < a[i][j])
r = j;
}
max = a[i][r];
c = Min(a, m, n, r);
if (c == i)
{
printf("Array[%d][%d]=%d", i, r, a[i][r]);
num++;
}
}
if (num == 0)
{
printf("None");
}
return 0;
}
提示
解析
9.单词统计
描述
从键盘输入一行字符(长度小于1000),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
输入
输入只有一行句子。仅有空格和英文字母构成。
输出
单词的个数。
例
输入:
stable marriage problem Consists of Matching members
输出:
7
代码
#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
char str[1005];
int i, a, b;
cin.getline(str, 1005);
b = 0;
for (i = 0; str[i] != '\0'; i++)
{
if (str[i] != ' ' && str[i + 1] == ' ')
{
b++;
}
}
a = strlen(str);
if (str[a - 1] != ' ')
{
b++;
}
cout << b;
return 0;
}
Comments NOTHING