解题思路:
此题因为涉及到的数字范围为-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 人评分
简单的a+b (C语言代码)浏览:537 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:1710 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:568 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:589 |
C语言训练-数字母 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:424 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1090 |
WU-格式化数据输出 (C语言代码)浏览:1746 |
杨辉三角 (C语言代码)浏览:484 |
sizeof的大作用 (C语言代码)浏览:1024 |