寻找第三大数只用循环结构真的能做出来吗T-T
这道题真的能用while for循环做出来吗???求助TvT
给定N个数,找到这N个数中第三大的数。如果没有则输出最大的数。
注意:若多个数字相同视为同一大小
Input:
输入一个数N(1≤N<1000)
接下来N行,每行输入第i个数的值(-1000<i<1000)
Output:
输出第三大的数,如果没有则输出最大的数 #include<stdio.h>
int main(void)
{
int a={1,2,8,5,5,6,8,8,9,0},i=0,j=0,k=0,N=10,tmp=0,max3=0;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(a<a)
{
tmp=a;
a=a;
a=tmp;
}
}
if(i>1)
{
k=0;
for(j=1;j<=i;j++)
{
if(a<a)k++;
}
max3=a;
if(k==2)
{
break;
}
}
}
if (k<2)
{
max3=a;
}
printf("%d",max3);
return 0;
}
int main(void)
{
int a={8,8,9,8,8,9,8,8,9,0},i=0,j=0,k=0,N=10,tmp=0,max3=0;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(a<a)
{
tmp=a;
a=a;
a=tmp;
}
}
if(i>0)
{
if (a>a)k++;
max3=a;
if (k==2)break;
}
}
if (k<2)
{
max3=a;
}
printf("%d",max3);
return 0;
} 本帖最后由 jackz007 于 2021-11-24 13:58 编辑
#include <stdio.h>
int main(void)
{
int c , d , i , j , k , n , t ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) scanf("%d" , & d) ;
for(i = 0 ; i < n - 1 ; i ++) {
for(j = i + 1 ; j < n ; j ++) {
if(d < d) {
t = d ;
d = d ;
d = t ;
}
}
}
for(k = 0 , c = i = 1 ; i < n && c < 3 ; i ++) {
if(d < d) {
k = i ;
c ++ ;
}
}
if(c < 3) k = 0 ;
printf("%d\n" , d) ;
}
编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
15
4 4 4 4 1 3 3 3 5 5 5 5 5 2 2
3
D:\0002.Exercise\C>
再给来个免排序的代码
#include <stdio.h>
int main(void)
{
int d , e = {0} , i , j , k , n ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) scanf("%d" , & d) ;
for(e = d , i = 1 ; i < n ; i ++) if(d > e) e = d ;
for(i = 0 ; i < 2 ; i ++) {
for(k = 0 , j = 0 ; j < n ; j ++) {
if(d < e) {
if(! k) k = d ;
else if (d > k) k = d ;
}
}
if(k) e = k ;
else break ;
}
if(i < 2) i = 0 ;
printf("%d\n" , e) ;
} 注:题目只要求输出第三大的值,或最大值,并没有要求储存。输入同时判断便可(一次 for 循环)无需多次 for 循环。时间复杂度 O(N),空间复杂度 S(1)#include <stdio.h>
int main()
{
int N, a = -32767, b = -32767, c;
scanf("%d", &N);
for(size_t i = 0; i < N; i++){
int x;
scanf("%d", &x);
if(x > a){
c = b;
b = a;
a = x;
}
else if(x > b && a != x){
c = b;
b = x;
}
else if(x > c && a != x && b != x){
c = x;
}
}
c ? printf("第三大的值:%d", c) : printf("最大值:%d", a);
return 0;
}输入:10
1
2
8
5
5
6
8
8
9
0输出:第三大的值:6
页:
[1]