如图所示。只需要排两个仅有3个元素的数组的排序。当然暴力排全部也是可以的,但那种做法提醒不了我的智商。
下图,注意换行也算字符的话,其ASCII码为10是第一小的,所以第二小就成了A
如图,如有疑问或不明白请追问哦!如经常需要问此类问题,可以点个关注哦。
源代码:
#include<stdio.h>
#include <iostream>
#include<algorithm>
using namespace std;
char A0[3]; //替换最小以取第二大
char A2[3]; //替换最大以取第二小
int cnt = 0;
int main() {
int N;
while(true){
scanf("%d", &N); //读入N(要换行,第一个换行不计入字符)
getchar(); //去掉换行
if (N < 2) {
printf("只有1个字符如何取第二大小?请重新输入!\n");
}
else break;
}
while ( N-->0 ) {//读入N个字符(之后的换行也算作字符)
char ch = getchar();
if (cnt < 3) {
A2[cnt] = A0[cnt] = ch;
cnt++;
} else{ //已经凑够3个字符
sort(A0, A0 + 3);
sort(A2, A2 + 3);
A2[2] = A0[0] = ch; //替换第3名
}
}
sort(A0, A0 + cnt);
sort(A2, A2 + cnt);
printf("min2='%d'\tmax2='%d'\n", A2[1], A0[cnt-2]); //输出第二小和第二大
std::system("pause"); //防止闪退
return 0;
}
题目没有说清楚,如果有并列第一或者并列最小的情况下怎么确定?比较简单的方法就是把这个字符数组进行一下排序,然后再进行输出就可以了。
#include<iostream>
using namespace std;
int main()
{ char a,b,M1,M2,m1,m2;
int i,n;
cin>>n>>a>>b;
if(a>b)M1=a,M2=b,m2=a,m1=b;
else M2=a,M1=b,m1=a,m2=b;
for(i=2; i<n; i++)
{ cin>>a;
if(a>M1)M2=M1,M1=a;
else if(a>M2)M2=a;
if(a<m1)m2=m1,m1=a;
else if(a<m2)m2=a;
}
cout<<m1<<" < "<<m2<<" ...<... "<<M2<<" < "<<M1<<endl;
return 0;
}
因未给出输出格式,如不需要输出最大最小,请自行修改输出语句。
追问不考虑你说的情况