解题思路:
此题因为涉及到的数字范围为-10000~10000,不用两重for循环暴力算法来解决,太费时,无法实现,将数乘积的选择用条件语句来进行选择 将极大程度地降低运算时间。
注意事项:
用Max,Min,Min1来分别存放输入的非0的最大数,最小数,第二小数max,min,max1分别存放其他数中的最大数,最小数,第二大数。将其进行如下代码中的初始化是为了该数字能够被程序进行有效的改变。
参考代码:
#include<stdio.h>
int main()
{
int n,a[100000],Min,Max,min,max,max1,Min1;
int i,f1,f2,j1,j2;
long int k;
while(scanf("%d",&n)!=EOF)
{
f1=1,f2=1;
Min=10000,Max=-10000,min=10000,max=-10000,max1=-10000,Min1=10000;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]<0)
{
if(max<a[i])
{
max=a[i];
j1=i;
}
if(min>a[i])
min=a[i];
f1=0;
}
else
{
if(Max<a[i])
Max=a[i];
if(Min>a[i])
{
Min=a[i];
j2=i;
}
f2=0;
}
}
for(i=j1+1;i<n;i++)
if(a[i]==a[j1])
max1=max;
for(i=j2+1;i<n;i++)
if(a[i]==a[j2])
Min1=Min;
if(max1!=max||Min1!=Min)
for(i=0;i<n;i++)
{
if(a[i]<0)
if(a[i]<max&&a[i]>max1)
max1=a[i];
if(a[i]>0)
if(a[i]>Min&&Min1>a[i])
Min1=a[i];
}
if(f1==0&&f2==0)
k=Max*min<max*Min?Max*min:max*Min;
else if(f1==0&&f2!=0)
k=max*max1;
else if(f1!=0&&f2==0)
k=Min1*Min;
printf("%d\n",k);
}
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:746 |
C语言程序设计教程(第三版)课后习题7.4 (C++代码)浏览:614 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:523 |
点我有惊喜!你懂得!浏览:1462 |
C语言程序设计教程(第三版)课后习题7.4 (Java代码)浏览:873 |
c primer plus 第十二章 12.1小节浏览:400 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:583 |
最小公倍数 (C语言代码)浏览:1107 |
核桃的数量 (C语言代码)浏览:726 |
1118(求助_已解决)浏览:351 |