求最值(C++)

作者 : admin 本文共4406个字,预计阅读时间需要12分钟 发布时间: 2024-06-11 共1人阅读

例题:

输入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

maxn=a

maxn

maxn=a

maxn>a

maxn

maxn=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>a

mini=a

mini

mini>a

mini=a

mini

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
using namespace std;
int main(){
    int n,a,maxx;
    cin>>n;
    for(int i=0;i>a>>maxx;
    if(a<maxx)a=maxx;    
    }
    cout<

例题5 查看测评数据信息

输入N个整数,求其中最小值。

输入格式

 第一行1个整数N:范围在[1,200]。
 第二行N个整数:每个整数范围在[0,1000000]。

输出格式

一个整数。

输入/输出例子1

输入:

4
3  6  1  9

输出:

1

#include
using namespace std;
int main(){
    int n,a,s=100000;
    cin>>n;
    for(int i=0;i>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
using namespace std;
int main(){
    int n,a,maxx,minn=9999;
    cin>>n;
    for(int i=0;i>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
using namespace std;
int main(){
    int n,a,maxx=0,minn=100000000;
    cin>>n;
    for(int i=0;i>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
using namespace std;
int main(){
    int n,a,maxx,minn=9999,maxi=0,mini=0;
    cin>>n;
    for(int i=0;i>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
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>a;
        if(a%2==0)
        {
        s++;
            m=m*a;
            b[g]=a;
            g++;
        }  
    }
    for(int i=0;id)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
using namespace std;
long long n,a,b,c,s[999],maxx=0,minn=150;
int main(){
    cin>>n;
    for(int i=0;i>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
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>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<<" "<

本站无任何商业行为
个人在线分享 » 求最值(C++)
E-->
© 2018 Theme by - 本站无任何商业行为 & WordPress Theme. All rights reserved 蒙ICP备2023002302号-2