本文主要是介绍研究生复试------21 谁是老二?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述 :
一维数组中存储不超过100个整型数据,请找出其中第二大的元素,输出这些元素的值以及它们的下标。
注意,由于元素值可能相同,因此具有最大值的元素个数可能不只一个,第二大的元素是比它们小的那些元素。
输入说明 :
用户可输入多组数据,每组数据由两行组成:
第一行:数组元素的个数n
第二行:n个数组元素,由空格分隔
输出说明 :
对于每组输入,输出一行,包含第二大的元素的值以及它们的下标(都是整数),整数之间以空格分隔。如果有多个下标,则下标按从小到大的顺序输出。每行的开头与结尾无多余空格。
每组输出占一行。
如果不存在第二大的元素,则输出"none"(不包含引号)
好吧,我承认这道题我做了好大一会儿,不就求个老二吗,下标是刚开始输入时的下标位置,最后选择直接再开辟个数组吧
#include<stdio.h>
#include<stdlib.h>
//排序,我喜欢的直接排序
void sort(int a[],int n){int *p;int i,j,key;p=a;for(i=1;i<n;i++){if(a[i-1]<a[i]){key=a[i];for(j=i-1;j>=0 && key>a[j];j--){a[j+1]=a[j];}a[j+1]=key;}}
}
int main(){int *a,*b,i,n,j,k,max;while(scanf("%d",&n)!=EOF){a=(int *)malloc(sizeof(int)*n);b=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];}sort(a,n);max=0;for(i=0;i<n;i++){if(a[i]!=a[max]){k=a[i];//找到啦,这就是老二的值printf("%d",k);break;}}if(i>=n)printf("none");else{ //看看等于老二的位置都在那里,遍历一下原数组for(i=0;i<n;i++){if(b[i]==k)printf(" %d",i);}}printf("\n");}return 0;}
这篇关于研究生复试------21 谁是老二?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!