前言
马上考试了(瘫)
题目
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