LDUOJ——2022级实验测试(一)

发布于 2022-12-18  1001 次阅读


前言

题目

1.时间间隔

描述

从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。如:3点5分25秒应表示为--03:05:25.假设两个时间在同一天内,时间先后顺序与输入无关。

输入

输入包括两行。
第一行为时间点1。
第二行为时间点2。 

输出

以“小时:分钟:秒”的格式输出时间间隔。格式参看输入输出。 

输入:

12:01:12
13:09:43

输出:

01:08:31

代码

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
    int a1, b1, c1, a2, b2, c2, t1, t2, t3, a, b, c;
    scanf("%d:%d:%d", &a1, &b1, &c1);
    scanf("%d:%d:%d", &a2, &b2, &c2);
    t1 = a1 * 3600 + b1 * 60 + c1;
    t2 = a2 * 3600 + b2 * 60 + c2;
    if (t1 > t2)
    {
        t3 = t1 - t2;
    }
    else
    {
        t3 = t2 - t1;
    }
    a = t3 / 3600;
    b = t3 / 60 % 60;
    c = t3 % 60;
    printf("%02d:%02d:%02d", a, b, c);
    return 0;
}

提示

解析

2.什么是鞍点?

描述

尝试寻找一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。如果没有鞍点,则输出“no exists”。

输入

第一行输入n ,第2至第n+1行,输入n×n的二维数组 

输出

鞍点的值或提示信息。

输入:

3
1 2 3
4 5 9
6 7 8

输出:

3

代码

#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 = m;
	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("%d", a[i][r]);
			num++;
		}
	}
	if (num == 0)
	{
		printf("no exists");
	}
	return 0;
}

提示

1≤n≤10

解析

3.各位数字之和排序

描述

给定n个正整数,根据各位数字之和从小到大进行排序。 

输入

输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。n≤10

输出

输出每组排序的结果。

输入:

3 230 59 110
5 199 220 108 235 120
0

输出:

110 230 59
120 220 108 235 199

代码

#include <stdio.h>
int f(int n)
{
int s=0;
    do
    {
        s=s+n%10;
        n=n/10;
    }
    while(n);
    return s;
}
int sort(int a[],int n)
{
	  int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(f(a[j])>f(a[j+1]))
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}
int main()
{
	int n,i;
	int a[100];
	while(scanf("%d",&n), n)
	{
		for(i=0; i<n; i++)
			scanf("%d",&a[i]);
		sort(a,n);
		for(i=0; i<n; i++)
		{
			if(i==0)
				printf("%d",a[i]);
			else
				printf(" %d",a[i]);
		}
		printf("\n");

	}
	return 0;
}

提示

解析

4.删除指定字符

描述

从键盘输入一个字符串str和一个字符c,删除str中的所有字符c并输出删除后的字符串str。

输入

第一行是一个字符串,不超过100个字符,可能会有空格;
第二行是一个字符。 

输出

删除指定字符后的字符串。 

输入:

sdf$sdf
$

输出:

sdfsdf

代码

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
	char str[105];
	char c;
	int i;
	cin.getline(str, 105);
	scanf("%c", &c);
	int l = strlen(str);
	for (i = 0; i < l; i++)
	{
		if (str[i] != c)
		{
			cout << str[i];
		}
	}
	return 0;
}

提示

解析

5.鲁东信电的密码

描述

输入一个字符串和数字m,编写程序,将输入的字符串译成密码,译码规律是:用原来的字母后面的第m个字母代替原来的字母。如当m=4时,将“China”译成“Glmre” 

输入

两行 
第一行是数字m

第二行是字符串,字符串的长度小于等于200000位

输出

翻译后的密码

输入:

4
China

输出:

Glmre

代码

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
char s[200005];
int main()
{
    int n;
    scanf("%d\n", &n);
    cin.getline(s, 200005);
    for (int i = 0; s[i] != '\0'; i++)
    {
        if (s[i] >= 'A' && s[i] <= 'Z')
        {
            s[i] = (s[i] + n - 'A') % 26 + 'A';
        }
        if (s[i] >= 'a' && s[i] <= 'z')
        {
            s[i] = (s[i] + n - 'a') % 26 + 'a';
        }
    }
    cout << s;
    return 0;
}

提示

(字母z的后一个字母是字母a,大写字母Z的后一个字母是A。)

解析

6.找这样的5位数

描述

有这样一些5位数,它的前两位和后两位能被数n整除,中间一位也能被n整除,例如当n=6时,12000、12012、12612等均是满足条件的数字,编程统计满足条件的数据个数并输出这些数。

输入

数字n(1≤n<10) 
注意多组输入! 

输出

从小到大输出满足条件的5位数,要求每行输出n个

输入:

输出:

代码

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
int main()
{
	int i, n, a = 0;
	while (scanf("%d", &n) != EOF)
	{
		i = 10000;
		while (i >= 10000 && i <= 99999)
		{
			if ((i / 1000) % n == 0 && (i / 100 % 10) % n == 0 && (i % 100) % n == 0)
			{
				cout << i;
				a++;
				if (a % n == 0)
				{
					cout << endl;
				}
				else
				{
					cout << " ";
				}
			}i++;
		}
	}
	return 0;
}

提示

解析

7.又一学生成绩

描述

有n个学生,有m门学科,按要求完成输入输出 

输入

第一行 N,M 代表 n个学生,m门学科 
接下来n行 每行 m 个数, 分 别代表第i个学生的m门成绩 

输出

第一行 输出每个学生的平均分(保留一位小数) 
第二行 输出总分最高的学生的序号 (从输入开始1,2,3,…,n如果总分相同按从小到大输出多个序号 
第三行 输出按平均分从大到小排序的结果(输出序号) 

输入:

2 2
50 60
100 99

输出:

55.0 99.5
2
2 1

代码

#define _CRT_SECURE_NO_WARNINGS 1
using namespace std;
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
struct student
{
	int xh;
	double cj;
	double zcj;
	double pjcj;
};
student a[114514];
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> a[j].cj;
			a[i].zcj = a[i].zcj + a[j].cj;
			a[i].xh = i+1;
		}
	}
	for (int i = 0; i < n; i++)
	{
		a[i].pjcj = a[i].zcj / m;
	}
	for (int i = 0; i < n; i++)
	{
		printf("%.1lf", a[i].pjcj);
		if (i != n - 1)
		{
			cout << " ";
		}
	}
	for (int i = n - 1; i > 0; i--)
	{
		for (int j = 0; j < i; j++)
		{
			if (a[j].zcj < a[j + 1].zcj)
			{
				swap(a[j], a[j + 1]);
			}
		}
	}
	cout << endl;
	cout << a[0].xh << endl;
	for (int i = 0; i < n; i++)
	{
		cout << a[i].xh;
		if (i != n - 1)
		{
			cout << " ";
		}
	}
	return 0;
}

提示

解析

8. 单词统计

从键盘输入一行字符(长度小于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;
}

提示

解析