是的,有很多人已经讨论过这个问题,但这个问题似乎有些不同寻常。程序应该找到用户输入的五个中的第二大数字。我们既不能使用loops
也不能使用if
语句。也不能使用arrays
和goto's
,但可以使用三元运算符。 I / 0的样本:
输入:34 -52 87 -12 20
输出:34
输入:-87 52 87 87 20
输出:87
如您所见,用户可以输入两个相同的数字,程序应该能够以这种方式对待它。这是C编程。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i1, i2, i3, i4, i5;
int max, second_max;
scanf("%d %d %d %d %d", &i1, &i2, &i3, &i4, &i5);
max = i1;
max = (i2 > max) ? i2 : max;
max = (i3 > max) ? i3 : max;
max = (i4 > max) ? i4 : max;
max = (i5 > max) ? i5 : max;
second_max = i1;
second_max = (i1 > second_max && i1 < max) ? i1 : second_max;
second_max = (i2 > second_max && i2 < max) ? i2 : second_max;
second_max = (i3 > second_max && i3 < max) ? i3 : second_max;
second_max = (i4 > second_max && i4 < max) ? i4 : second_max;
second_max = (i5 > second_max && i5 < max) ? i5 : second_max;
printf("\nmax: %d", max);
printf("\nsecond_max : %d", second_max);
return 0;
}
在这里,我可以找到所有内容,当涉及第二个输出样本时,它会失败。我有编程经验,但从早上起就无法解决这个问题
答案 0 :(得分:2)
显然,如果您可以对数字进行排序,问题很容易解决。那么如何仅使用三元运算符对数字进行排序?答案称为sorting network。
这是代码的样子:
#include <stdio.h>
void swap( int *a, int *b )
{
int x = *a <= *b ? *a : *b;
int y = *a <= *b ? *b : *a;
*a = x;
*b = y;
}
int main( void )
{
int a = 1, b = 9, c = 3, d = 8, e = 3;
swap( &a, &b );
swap( &c, &d );
swap( &b, &e );
swap( &a, &b );
swap( &d, &e );
swap( &a, &c );
swap( &c, &d );
swap( &b, &c );
swap( &c, &d );
printf( "%d %d %d %d %d\n", a,b,c,d,e );
}
对数字进行排序后,第二大数字为d
。
请注意,如果您不能使用子程序和/或指针,则只需复制swap
函数的正文并将其粘贴到main
九次。然后根据需要更改字母。玩得开心。
答案 1 :(得分:0)
初始化两个变量:最高和第二高度INT_MIN
为所有元素执行以下操作:
Secondhighest = max(a [i],secondhighest)
最高&lt;第二高?交换它们:do_nothing
TC:O(N)