LDUOJ-期末测试(7)

发布于 2022-12-14  1031 次阅读


前言

马上考试了(瘫)

题目

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;
}

提示

解析