实验室第二次讲课

本文最后更新于:1 年前

实验室第二次讲课

#47. 时间转换

说明

给定一个以秒为单位的时间t,要求用的格式来表示这个时间。<H>表示时间,<M>表示分钟,而表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“”;若t=3661,则输出“”。

输入格式

输入只有一行,是一个整数t(0<=t<=86399)。

输出格式

输出只有一行,是以“”的格式所表示的时间,不包括引号。

样例

输入数据 1

1
0

输出数据 1

1
0:0:0
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main(void){
int t;
scanf("%d",&t);
int hh,mm,tt;
tt=t%60;
mm=((t-tt)%3600)/60;//求余后单位为秒,需要转化为分
hh=t/3600;//利用向下取整的特性直接求时
printf("%d:%d:%d",hh,mm,tt);
}

#18. ABC比大小

说明

这道题很简单,输入三个数字,只需按照他们的大小排好序就行。

输入格式

  • 第一行随机输入三个整数ABC(0<=A,B,C<=10000)

输出格式

  • 将A,B,C按照从小到大的顺序输出即可每个数字直接用空格隔开。

样例

输入数据 1

1
2 3 1

输出数据 1

1
1 2 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//分支选择写法
#include<stdio.h>
int main() {
int A, B, C;
scanf("%d %d %d",&A,&B,&C);
if (A < B) {
if (B < C) {
printf("%d %d %d", A, B, C);
} else {
if (A < C) {
printf("%d %d %d", A, C, B);
} else {
printf("%d %d %d", C, A, B);
}
}
} else {
if (C < B) {
printf("%d %d %d", C, B, A);
} else {
if (A < C) {
printf("%d %d %d", B, A, C);
} else {
printf("%d %d %d", B, C, A);
}
}
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//排序写法
#include<stdio.h>
int main(void){
int a[4];
for(int i=0;i<3;i++){
scanf("%d",a[i]);
}
for(int i=0;i<3;i++){//冒泡排序
for(int j=0;j<3-i-1;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}//(进阶:推荐学习sort排序)

for(int i=0;i<3;i++){
if(i<2)printf("%d ",a[i]);
else printf("%d",a[i]);
}
}
1

#24. 求平均分

说明

求平均分和最高分最低分,一直是老师的一份简单而又头疼的工作,数量多,容易算错,现在我们编写一个程序来帮助老师求平均分、最高分和最低分吧。

输入格式

输入N个学生(1<=N <=10000),以下N行输入N个学生的成绩,成绩含有整数和小数。

输出格式

第一行输出最低分和最高分,最低分最高分之间用一个空格隔开,若成绩为小数则向上取整,例如89.4输出90,

第二行输出平均分。

注意,平均成绩保留两位小数哦。

样例

输入数据 1

1
2
3
4
5
6
5
90
85
73
88
71

Copy

输出数据 1

1
2
71 90
81.40

Copy

提示

测试点1:

1
2
3
4
5
6
5
90
85
73
88
71

Copy

测试点2:

1
2
1
99

Copy

测试点3:

1
2
3
4
5
6
7
8
9
100
7 49 73 58 30 72 44 78 23 9 40 65 92 42 87 3 27 29 40.5 12 3
69 9 57 60 33 99 78 16 35 97 26 12 67 10 33 79 49 79 21 67 72
93 36 85 45 28 91 94 57 1 53.5 8 44 68.5 90.5 24 96 30 3 22
66.5 49 24 1 53 77 8 28 33 98 81 35.5 13 65 14 63 36 25 69 15
94 29 1 17 95 5 4 51 98 88.5 23 5 82 52 66 16 37 38 44
测试点3答案为
1 99
46.21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <math.h>
int main() {
int n,i;
float score,max,min,sum,average;
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%f",&score);
if(i==1){//当i=1时,为变量赋初值
max=score;
min=score;
sum=score;
}else{
sum+=score;
if (score>max){
max=score;
}else if(score<min){
min=score;
}
}
}
average=sum/n;
printf("%.0f %.0f\n%.2f",ceil(min),ceil(max),average);
//ceil():向上取整函数,相对的floor():向下取整函数
return 0;
}

#26. 能被7和11整除的数字

说明

有一种神奇的数字,我们暂且叫它“7数”吧,它能被7或者11整除或者同时被它俩整除,让我们找出这些数字。

输入格式

输入一个数字N(1<=N<=10000),找出不比它大的所有“7数”。若没有这个数,则输出-1。

输出格式

输出所有“7数”,每个“7数”之间用空格隔开,末尾不能有多余的空格。

样例

输入数据 1

1
60

Copy

输出数据 1

1
7 11 14 21 22 28 33 35 42 44 49 55 56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main (){
int i;
int a;
scanf("%d",&a);
if (a<7){
printf("%d",-1);
}else{
for (i = 1; i <= a; ++i){
if (i%7 == 0 || i%11 == 0){
printf("%d ",i);
}
}
}
return 0 ;
}

#29. 数字的判断

说明

给出一个不多于5位数的整数,要求

  • 求出它是几位数
  • 分别输出每一位数字
  • 按逆序输出各位数字,例如原数为321,应输出123

输入格式

一个不大于5位的数字N(1<=N<=99999)

输出格式

输出一共分三行

  • 第一行 位数
  • 第二行 用空格分开的每个数字,注意最后一个数字后没有空格
  • 第三行 按逆序输出这个数

样例

输入数据 1

1
12345

Copy

输出数据 1

1
2
3
5
1 2 3 4 5
54321
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//字符串解法
#include <stdio.h>
#include <string.h>
int main() {
char a[10]="\0";
gets(a);
printf("%d\n", strlen(a));
for (int i = 0; i < strlen(a)-1; i++) {
printf("%c ", a[i]);
}
printf("%c\n",a[strlen(a)-1]);
for (int i = strlen(a) - 1; i >= 0; i--) {
printf("%c", a[i]);
}
}

根据以上算法思想,大家思考一下以下题目

4. digit 函数

#28. 超级三角形

说明

超级三角形,让我按照自己喜欢的样式来打印漂亮的三角形吧,这个三角形是等腰三角形,而且团可以定制哦。

输入格式

输入一个 n(1<=n<=15) 和一个 图案c 。

输出格式

第一行1个图案c

第二行3个图案c

按照规则输出三角形!

样例

输入数据 1

1
5 a

Copy

输出数据 1

1
2
3
4
5
    a
aaa
aaaaa
aaaaaaa
aaaaaaaaa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main(){
int i, n, j = 1, a = 1, c;
char t;
scanf("%d %c", &n,&t);
c = n;
for (i = 1; i <= n; i++) {//行控制
while (a <= c - 1) {//注意观察空格规律,不要多打
printf(" ");
a++;
}
c--;
j = 1;
while (j <= (2 * i) - 1) {
printf("%c",t);
j++;
}
a = 1;
printf("\n");
}
return 0;
}

#34. 能生的小兔子

说明

十九世纪七十年代,有人从外地带来了一对兔子到澳大利亚。兔子瞬间患难成灾。这些小兔子每3个月就会生一对小兔子,往后的每个月都会生一对小兔子。在理想的情况下(兔子不死)。我们来算算在第N个月后澳大利亚会有多少对兔子。

输入格式

输入月份N(1<=N<=50)

输出格式

输出每个月兔子的对数,中间用空格隔开。不用考虑末尾的空格。

样例

输入数据 1

1
8

Copy

输出数据 1

1
1 1 2 3 5 8 13 21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//知识点:斐波那契数列
#include <stdio.h>
int main(){
int n;
long long a[50]={1};//需要使用long long,在47后会超过int范围;
scanf("%d",&n);
a[0]=1,a[1]=1;
for(int i=2;i<n;i++){
a[i]=a[i-1]+a[i-2];
}
for(int i=0;i<n;i++){
printf("%lld " , a[i]);
}
return 0;
}

#46. 找众数

背景

由于菜菜子比较菜,所以出了一道很菜很菜的题目。

描述

菜菜子拥有一个由正整数组成的序列,需要你从中找出众数(众数是在一组数据中,出现次数最多的数据)

输入

第一行给定一个正整数nn, 满足 3\leq n\leq 10003≤n≤1000 . 第二行输入由nn个正整数组成的序列。序列里的数xx满足0\leq x\leq 1000000≤x≤100000

输出

输出序列中的众数x_{mode}xmode和该数出现的次数count\left(x_{mode}\right)coun**t(xmode),如果由多个相同数量的众数则输出最大的众数(显然必定唯一)。

输入数据 1

1
2
7
1 4 3 3 2 2 3

Copy

输出数据 1

1
3 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//c语言桶排序写法
//!!注意:桶排序只能用于数值范围小且集中的情况;
#include <stdio.h>
int a[100005]={0};
int main(){
int pos=0;
int n;
scanf("%d",&n);
while(n--){
int aa;
scanf("%d",&aa);
a[aa]++;
}
for(int i=1;i<=100000;++i){
if(a[pos]<=a[i])pos=i;
}
printf("%d %d",pos,a[pos]);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//c++写法
#include<bits/stdc++.h>
using namespace std;
int main(void){
map<int,int>a;//
int n;
cin>>n;
int m;
for(int i=0;i<n;i++){
cin>>m;
a[m]++;
}
int maxv=-1;
int p=0;
map<int, int>::iterator iter;
iter=a.begin();
while(iter!=a.end()){
maxv=max(iter->second,maxv);
if(maxv==iter->second)p=iter->first;
iter++;
}
cout<<p<<' '<<maxv;
}

根据以上算法思想,大家思考一下以下题目

#40. 集合


实验室第二次讲课
https://zeitspeed.github.io/2022/11/10/留言板/
作者
yxisme
发布于
2022年11月10日
许可协议