zoukankan      html  css  js  c++  java
  • (noi.openjudge.cn) 1.9编程基础之顺序查找T01——T05

    T01 查找特定元素的值

    描述

    在一个序列(下标从1开始)中查找一个给定的值,输出第一次出现的位置。

    输入

    第一行包含一个正整数n,表示序列中元素个数。1 <= n <= 10000。
    第二行包含n个整数,依次给出序列的每个元素,相邻两个整数之间用单个空格隔开。元素的绝对值不超过10000。
    第三行包含一个整数x,为需要查找的特定值。x的绝对值不超过10000。

    输出

    若序列中存在x,输出x第一次出现的下标;否则输出-1。

    样例输入
    5
    2 3 6 7 3
    3
    样例输出
    2
    样例
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int a[10001],n,m; 
     5 int main()
     6 {
     7     cin>>n;
     8     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
     9     cin>>m;
    10     for(int i=1;i<=n;i++)
    11      if(a[i]==m) 
    12      {
    13          cout<<i;return 0;
    14      }
    15     cout<<-1;
    16 }
    View Code

    T02 输出最高分数的学生姓名

    描述

    输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。

    输入

    第一行输入一个正整数N(N <= 100),表示学生人数。接着输入N行,每行格式如下:
    分数 姓名
    分数是一个非负整数,且小于等于100;
    姓名为一个连续的字符串,中间没有空格,长度不超过20。
    数据保证最高分只有一位同学。

    输出

    获得最高分数同学的姓名。

    样例输入
    5
    87 lilei
    99 hanmeimei
    97 lily
    96 lucy
    77 jim
    样例输出
    hanmeimei
    样例

    不一样的解法:利用map有序存数的特点,慢2ms

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<map> 
     4 #include<cstring>
     5 using namespace std;
     6 map<int ,string>mp;
     7 int n; 
     8 int main()
     9 {
    10     cin>>n;
    11     for(int i=1;i<=n;i++) 
    12     {
    13         int m;
    14         string a;
    15         cin>>m>>a;
    16         mp[m]=a;
    17     }
    18     map<int,string>::iterator it=mp.end();
    19     it--;
    20     cout<<it->second;
    21 }
    View Code

    一般解法:0ms

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int n,maxx; 
     6 string ans;
     7 int m;
     8 string a;
     9 int main()
    10 {
    11     cin>>n;
    12     for(int i=1;i<=n;i++) 
    13     {
    14         cin>>m>>a;
    15         if(m>maxx) 
    16         {
    17             ans=a;
    18             maxx=m;
    19         }
    20     }
    21     cout<<ans;
    22 }
    View Code2

    T03 不高兴的津津

    描述

    津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

    输入

    包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

    输出

    包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

    样例输入
    5 3
    6 2
    7 2
    5 3
    5 4
    0 4
    0 6
    样例输出
    3
    样例
     1 #include<iostream>
     2 using namespace std;
     3 int maxx,ans;
     4 int main()
     5 {
     6     int a,b;
     7     for(int i=1;i<=7;i++)
     8      {
     9          cin>>a>>b;
    10          if(a+b>maxx)
    11          {
    12              maxx=a+b;
    13              ans=i;
    14          }
    15      }
    16      cout<<ans;
    17 }
    View Code

    T04 谁拿了最多奖学金

    描述

    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

    1)     院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;

    2)     五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;

    3)     成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;

    4)     西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;

    5)     班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;

    只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

    现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

    输入

    第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。

    输出

    包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。

    样例输入
    4
    YaoLin 87 82 Y N 0
    ChenRuiyi 88 78 N Y 1
    LiXin 92 88 N N 0
    ZhangQin 83 87 Y N 1
    样例输出
    ChenRuiyi
    9000
    28700
    样例
     1 #include<iostream>
     2 using namespace std;
     3 int maxx,sum;
     4 string name,a;
     5 int n,qimo,banji,lunwen;
     6 char ganbu,xibu;
     7 int main()
     8 {
     9     cin>>n;
    10     for(int i=1;i<=n;i++)
    11      {
    12          cin>>a>>qimo>>banji>>ganbu>>xibu>>lunwen;
    13          int k=0;
    14          if(qimo>80&&lunwen) k+=8000;
    15          if(qimo>85&&banji>80) k+=4000;
    16          if(qimo>90) k+=2000;
    17          if(qimo>85&&xibu=='Y') k+=1000;
    18          if(banji>80&&ganbu=='Y') k+=850;
    19          if(k>maxx)
    20          {
    21              maxx=k;
    22              name=a;
    23         }
    24         sum+=k;
    25      }
    26      cout<<name<<endl<<maxx<<endl<<sum;
    27 }
    View Code

    T05 最大值和最小值的差

    描述

    输出一个整数序列中最大的数和最小的数的差。

    输入

    第一行为M,表示整数个数,整数个数不会大于10000;
    第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。

    输出

    输出M个数中最大值和最小值的差。

    样例输入
    5
    2 5 7 4 2
    样例输出
    5
    样例

    方法1:读入的时候顺便记录最大最小值,时间6ms,内存464KB

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 using namespace std;
     5 int n,x;
     6 int maxx=-100001,minn=100001;
     7 int main()
     8 {
     9     cin>>n;
    10     for(int i=1;i<=n;i++)
    11     {
    12         scanf("%d",&x);
    13         maxx=max(maxx,x);
    14         minn=min(minn,x);
    15     }
    16     cout<<maxx-minn;
    17 }
    View Code1

    方法2:读完之后,sort排序,时间12ms,内存464KB

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 using namespace std;
     5 int n,a[10001];
     6 int main()
     7 {
     8     cin>>n;
     9     for(int i=1;i<=n;i++)
    10         scanf("%d",&a[i]);
    11     sort(a+1,a+n+1);
    12     cout<<a[n]-a[1];
    13 }
    View Code2
  • 相关阅读:
    PS后期合成,你和大神的差距就这5步!
    欧几里得算法:从证明等式gcd(m, n) = gcd(n, m mod n)对每一对正整数m, n都成立说开去
    谜题:过桥问题
    《世界是数字的》读书笔记第一部分_硬件篇
    完全偶图K(3,3)与完全图K5是否存在平面表示
    Dijkstar算法的数学原理
    LeetCode 141. Linked List Cycle
    LeetCode 155. Min Stack
    LeetCode 160. Intersection of Two Linked Lists
    LeetCode 165.Compare Version Numbers
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6106732.html
Copyright © 2011-2022 走看看