例题:
输入N个整数,求其中最大值。
输入格式
第一行1个整数N:范围在[1,200]。
第二行N个整数:每个整数范围在[0,1000000]。
输出格式
一个整数。
输入/输出例子1
输入:
4
3 6 1 9
输出:
9
分析:
我们学过通过for+if对输入的数据进行查找和统计,那么是否能利用这个查找出数据中最大的那个数据呢?
if的条件该如何写呢?
我们可以引用一个新的变量maxn用于存放最大数,将所有数据依次和maxn比较,如果该数比maxn大,则将该数据的值存放到maxn中。
当所有的数据都比较完成后,maxn存放的数据就是最大数。
为保证能找出正确的最大数,maxn的初值最好比所有输入的数据小。
本题样例中的比较过程如下:
题目中输入的数据范围是[0,1000000],maxn的初值可以赋值为0
循环次数 |
循环前 |
1 |
2 |
3 |
4 |
输入的数据(a) |
3 |
6 |
1 |
9 |
|
比较过程 |
maxn<amaxn=a |
maxn<amaxn=a |
maxn>a |
maxn<amaxn=a |
|
maxn |
0 |
3 |
6 |
6 |
9 |
代码分析
1.输入一组整数的个数n;
2.设置一个变量maxn存放最大的数,初值赋值为0;
3.在循环中做以下操作:
(1) 读入一个整数a;
(2)判断这个整数a是否大于maxn,如果是,就将a的值存放到maxn中;
4. 最后输出最大数maxn。
思考
输入N个整数(数据范围不明),求其中最大值。
输入格式
第一行1个整数N:范围在[1,200]。
第二行N个整数。
输出格式
一个整数。
输入/输出例子1
输入:
4
-3 -6 -1 -9
输出:
-1
此题与上题情景相似,但不清楚题目数据的范围,那么maxn的初值应该设置为多少?数据范围是否还是用int呢?
如果题目的数据范围包含负数,或者不好根据数据范围来定初值的话,将所有的数据类型定义为long long,我们可以找到第一个数a,将maxn设为a,这样的话相当于n个数当中找最大值和最小值,也符合题意。
代码分析:
1. 输入一组整数的个数n;
2. 在循环外先输入第一个数据a;
3. 将第一个数据的值,赋值给maxn;
4. 在循环中做以下操作:(注意此时只剩下n-1个数据需要输入)
(1) 继续读入下一个整数a;
(2)判断这个整数a是否大于maxn,如果是,就将a的值存放到maxn中;
4. 最后输出最大数maxn。
例题:
输入N个整数,求其中最小值。
输入格式
第一行1个整数N:范围在[1,200]。
第二行N个整数:每个整数范围在[0,1000000]。
输出格式
一个整数。
输入/输出例子1
输入:
4
3 6 1 9
输出:
1
我们已经掌握了求最大值的方法,那么最小值又该如何求解呢?
分析:
参考最大值的求解方法我们可以引用一个新的变量mini用于存放最小数,将所有数据依次和mini比较,如果该数比mini小,则将该数据的值存放到mini中。
当所有的数据都比较完成后,mini存放的数据就是最小数。
思考:
那么mini的初值应该赋值为多少呢?
为保证能找出正确的最小数,mini的初值最好比所有输入的数据大。
本题样例中的比较过程如下:
题目中输入的数据范围是[0,1000000],mini的初值可以赋值为1000000
循环次数 |
循环前 |
1 |
2 |
3 |
4 |
输入的数据(a) |
3 |
6 |
1 |
9 |
|
比较过程 |
mini>amini=a |
mini<a |
mini>amini=a |
mini<a |
|
mini |
1000000 |
3 |
3 |
1 |
1 |
代码分析
1.输入一组整数的个数n;
2.设置一个变量mini存放最小的数,初值赋值为1000000;
3.在循环中做以下操作:
(1) 读入一个整数a;
(2)判断这个整数a是否小于mini,如果是,就将a的值存放到mini中;
4. 最后输出最小数mini。
例题4 查看测评数据信息
输入N个整数(数据范围不明),求其中最大值。
输入格式
第一行1个整数N:范围在[1,200]。
第二行N个整数。
输出格式
一个整数。
输入/输出例子1
输入:
4
-3 -6 -1 -9
输出:
-1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,maxx;
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>maxx;
if(a<maxx)a=maxx;
}
cout<<a;
return 0;
}
例题5 查看测评数据信息
输入N个整数,求其中最小值。
输入格式
第一行1个整数N:范围在[1,200]。
第二行N个整数:每个整数范围在[0,1000000]。
输出格式
一个整数。
输入/输出例子1
输入:
4
3 6 1 9
输出:
1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,s=100000;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a<s)s=a;
}cout<<s;
return 0;
}
课堂练习3 查看测评数据信息
题目描述
给出 n(n≤100) 和 n 个整数 ai(0≤ai≤1000)
求这 n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。
输入式
输出格式
输入输出样例
输入
6
1 1 4 5 1 4
输出
4
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,maxx,minn=9999;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a>maxx)maxx=a;
if(a<minn)minn=a;
}
cout<<maxx-minn;
return 0;
}
课堂练习4 查看测评数据信息
输入N个正整数,找出其中的两个数a和b,使分式a/b最大(不是整除)。
输入格式
第一行1个整数N:范围在[2,200]。
第二行N个整数:每个整数范围在[1,100000000]。
输出格式
2个整数:a和b。(数据保证有唯一解)
输入:
4
3 6 1 9
输出:
9 1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,maxx=0,minn=100000000;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a>maxx)maxx=a;
if(a<minn)minn=a;
}
cout<<maxx<<" "<<minn;
return 0;
}
课后练习3 查看测评数据信息
某班级周一升国旗按照身高由低到高列队,有两位调皮的同学,并没有按照要求站队,恰好这两位同学的身高分别是班里最矮的和最高的;你能帮助老师找出这两位同学的位置吗?
【输人格式】
第一行一个数n ,即班级同学的人数;
第二行:有n个正整数,每个数之间有一个空格,每个数代表这一列每个同学的身高。
【输出格式】
第一行:输出最矮同学的位置:
第二行:输出最高同学的位置;
5
167 162 169 168 164
【输出样例】
2
3
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,maxx,minn=9999,maxi=0,mini=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a>maxx)maxx=a,maxi=i;
if(a<minn)minn=a,mini=i;
}
cout<<mini+1<<endl<<maxi+1;
return 0;
}
课后练习4 查看测评数据信息
给你一堆杂乱无章的正整数,里面有若干个奇数和偶数(至少有一个偶数),请你帮我找
出这堆数中有多少个偶数,算出这些偶数之积,并我出最小和最大的偶数。
【输人格式】
第一行:仅一个数n (2<n<10),即这堆数的个数;
第二行:有n个正整数,每个数之间有一个空格,每个数小于等于50。
【输出格式】
第一行:输出偶数的个数与积:
第二行:输出最小的偶数;
第三行:输出最大的偶数。
【输人样例】
5
8 7 4 9 12
【输出样例】
3 384
4
12
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,a,s=0,m=1,d=-100000,x=100000,b[100],g=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a%2==0)
{
s++;
m=m*a;
b[g]=a;
g++;
}
}
for(int i=0;i<s;i++){
if(b[i]>d)d=b[i];
if(b[i]<x)x=b[i];
}
cout<<s<<" "<<m<<endl<<x<<endl<<d;
return 0;
}
作业调查 查看测评数据信息
402班今天进行了一次调查,要求每个学生给出昨天晚上花在语文、数学、英语作业的时间(以分钟为单位),这样就可以知道学生做完作业最慢的用了多少时间,最快的用了多少时间。
输入格式
第一行:一个整数n(n≤60);接下来n行,每行三个整数,分别表示某个学生做语文、数学、英语作业所花的时间。(假设每科所用时间小于120)
输出格式
一行:两个整数,分别表示做作业最慢的时间和最快的时间。
输入/输出例子1
输入:
10
30 20 25
20 10 15
40 30 30
20 15 30
50 60 40
13 18 21
15 5 5
25 40 30
12 8 10
43 35 42
输出:
150 25
#include<bits/stdc++.h>
using namespace std;
long long n,a,b,c,s[999],maxx=0,minn=150;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
s[i]=a+b+c;
if(s[i]>maxx)maxx=s[i];
if(s[i]<minn)minn=s[i];
}
cout<<maxx<<" "<<minn;
return 0;
}
统计成绩 查看测评数据信息
每次考试或测试后,老师们都要进行成绩统计。假如某次期末考试有语文、数学、英语三门课,现请你编程输出总成绩最高分以及每门学科的最高分。
输入格式
共n+1行。
第1行是一个正整数n(1≤n≤100),表示学生人数,从1到n编号。
接下来n行,每行3个整数,依次表示每个学生的语文、数学、英语成绩(每门课成绩是0到100之间的整数,包括0和100)。
输出格式
输出共1行,包含4个整数,分别表示三门课总成绩最高分,语文学科的最高分,数学学科的最高分,英语学科的最高分
输入/输出例子1
输入:
3
80 67 96
88 71 93
90 95 80
输出:
265 90 95 96
样例解释
【样例解释】
输入3个学生成绩,第1个学生语文、数学、英语三门课的成绩分别为80,67,96,第2个学生语文、数学、英语三门课的成绩分别为88,71,93,第3个学生语文、数学、英语三门课的成绩分别为90,95,80。第3个学生的总成绩最高,为265。语文学科的最高分是90分,数学学科的最高分95,英语学科的最高分96。
#include<bits/stdc++.h>
using namespace std;
long long n,a,b,c,a1,b1,c1,s[999],maxx=0,minn=150;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
s[i]=a+b+c;
if(s[i]>maxx)maxx=s[i];
if(a>a1)a1=a;
if(b>b1)b1=b;
if(c>c1)c1=c;
}
cout<<maxx<<" "<<a1<<" "<<b1<<" "<<c1;
return 0;
}