链接:https://ac.nowcoder.com/acm/contest/19305/1035 来源:牛客网
给出n个数字,请你求出在给出的这n个数字当中,最大的数字与次大的数字之差,最大的数字与次小的数字之差,次大的数字与次小的数字之差,次大的数字与最小的数字之差. 输入描述: 输入有两行,第一行有一个数字n 第二行有n个整数,即给出这n个数字. 输出描述: 输出四个整数,表示答案. 示例1 输入 复制 5 4 1 3 2 3 输出 复制 1 2 1 2 说明 最大的数字为4,次大的数字为3,次小的数字为2,最小的数字为1,所以得出差值即可 示例2 输入 复制 7 6 7 2 1 9 3 2 输出 复制 2 7 5 6 说明 最大的数字为9,次大的数字为7,次小的数字为2,最 小的数字为1,所以得出差值即可. 备注: 对于 30 % 30%的数据,保证 𝑛 ≤ 8 n≤8
对于 60 % 60%的数据,保证 𝑛 ≤ 16 n≤16
对于 100 % 100%的数据,保证 𝑛 ≤ 100 n≤100
对于所有数据,保证每个数字小于等于100且不同数字的个数大于4 这个题不用数组的话我没想到能保存次小,次大的方法。 而用了数组的时候没又想到次大次小是不同于最大最小的数。 看了视频才知道 #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a; cin>>a; int maxn=a; int maxn2=-101; int minn=a; int minn2=101; for(int i=1;i<n;i++){ cin>>a; if(a>maxn){ maxn2=maxn; maxn=a; } if(a>maxn2&&a<maxn) maxn2=a; if(a<minn){ minn2=minn; minn=a; } if(a>minn&&a<minn2) minn2=a; } printf("%d %d %d %d",maxn-maxn2,maxn-minn2,maxn2-minn2,maxn2-minn); return 0; } 我之前都没有见过可以见过可以把下面的输入也分开的,一个单独存储,其他的用循环输入,这又是一个新的思路。 而且可以保存次大,次小。 思路是把输入的一个数先给最大,和最小 然后给次大值赋的比较小这样任何一个数输进来后都可以成为次大值,次小值比较大赋的比较小大这样任何一个数输进来后都可以成为次小值。 然后在循环中进行判断改变值就行了。