题目
题意翻译
输入N,和N个数字,问第二大的数是多少
注意:输入 4 100 200 300 300(200是认为第二大的)
2<=N<=100,N个数字的范围在1~1000
分析
话说某岛国很能出超级水的紫、黑题,往往岛国文说得很玄学,翻译过来简直是侮辱智商……(逃
先排序,在从后往前找。因为如果最大数不只出现过一次,那么排完序后从最后一个开始就一直是最大数,如果不同,那么一定是第二大的数,输出完退出就行(一定要在末尾数出一个换行,不然全 WA)。
像这样:
//排序前: 100 100 100 200 200 200 //排序后: 200//第一大。 200 200 100//第二大。 100 100
代码
#include<bits/stdc++.h> using namespace std; int a[105],n; int main() { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n);//排序。 for(int i=n-2;i>=0;i--)//从后往前找。 { if(a[i]!=a[i+1])//不是最大的。 { printf("%d ",a[i]);//一定要输出一个换行!!! return 0;//找到就退出。 } } return 0; }
题目原文
私は富豪だ。それも大富豪と言っていいぐらいお金を持っている。欲しいと思ったものはまずこの有り余るお金を使って買うことができる。しかし、この底の尽きないように思えるほどのお金でさえ人の心を買うことはできない。いくらお金があろうとも、ひとたび多くの庶民の反発を買ってしまえば、これまでのように生きていくことは難しくなるだろう。
この度私は庶民の気持ちを理解するため、初めてファミリーレストランという場所を訪れた。メニューを広げ、料理の内容とその金額を確かめると、なるほど驚きの安さである。どの料理の金額も取るに足らないようなものだから、とりあえず最も金額が高いものを選ぼうかと考えた。
しかし、考えてみれば、私は何のためにファミリーレストランに来たのであったか。庶民の気持ちを理解しようというのに、金額のことを考えずに最も高いものを選ぼうなどと、まるで意味がないではないか。ファミリーレストランに来たうえ、これ見よがしに最も高い料理を注文したとなったら、私の悪評が広まってしまう可能性だってある。
とはいえ、せっかくだから高いものを選んでその味をみてみたいというのも確かである。そうだ、そういうことなら、この店で 2 番目に高い料理を注文することにしよう。そう思って料理の金額を書き出してみたが、料理の種類が多いために 2 番目に高いものを探すのはなかなか骨が折れる。自分で探すかわりに、プログラムを書いてなんとかできないだろうか?
おっと、プログラムを書き始める前にひとつ言っておくが、最も高い金額の料理が複数あるときには注意してもらいたい。というのは、たとえば 4 種類の料理があり、それぞれの金額が 100 円、 200 円、 300 円、 300 円であったときには、 2 番目に高いものというのは 200 円の料理になるということだ。