永发信息网

C语言 求一个数组中第二小的数的下标

答案:5  悬赏:0  手机版
解决时间 2021-03-13 10:29
C语言 求一个数组中第二小的数的下标
最佳答案
你可以这样做,首先,你定义两个数组,一个数组用来保存原数据(我们将它标记为数组A),另一个数组用来保存排序(从小到大)后的数据(我们将它标记为数组B),我们把数组A排序后的结果放到数组B中,然后取出数组B中的第二个元素(即B[1]),去与数组A中的数据做比较,就可以找出第二小的数据在原数组中的位置了~~~~
我个人认为,给你个解题的思路,让你自己去写代码,胜过于直接给你代码……
如果你想要代码的话,可以跟我讲下,我帮你写~~~但是,我认为这对你没有任何帮助~~
全部回答
#include
void main()
{int a[10];
int i,n,m,k=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
n=a[0];
for(i=0;i<10;i++)
if(n>a[i])
n=a[i];
for(i=0;i<10;i++)
if(a[i]!=n)
{ m=a[i];
k=i;break;
}
for(i=0;i<10;i++)
if(m>a[i]&&a[i]>n)
{ m=a[i];
k=i;
}
printf("%d",k);
}
这个您试一下:
#include
main()
{int m1,m2,a[8],i,k,n;
for(i=0;i<8;i++)
scanf("%d",&a[i]);
m1=a[0];
n=0;
m2=a[1];
k=1;
for(i=1;i<8;i++)
if(a[i] {m2=m1;
k=n;
m1=a[i];
n=i;
}
else if((a[i] { m2=a[i];
k=i;
}
if(m2==m1)
printf("所有数相同");
else
printf("k=%d",k);
}
或者这个也行:
#include
main()
{int m1,m2,a[8],j,i=1,k,n;
for(j=0;j<8;j++)
scanf("%d",&a[j]);
m1=a[0];
n=0;
while(i<8)
{if(a[i]!=m1)
{m2=a[i];
k=i;
break;
}
i++;
}
if(i==8)
printf("所有数相同");
else
{for(;i<8;i++)
if(a[i] {m2=m1;
k=n;
m1=a[i];
n=i;
}
else if(a[i] { m2=a[i];
k=i;
}
printf("k=%d",k);
}
}
两种方法都可以,希望能够帮到您。
满意答案是错误的,时间和空间复杂度过高,正确答案如下:
对n个数两两比较,看成是比赛,最后得出冠军和亚军即可,即a[0] vs a[1], a[2] vs a[3],... 最后还有多的就轮空,每次比较的较小值“获胜”进入下一轮;
对“获胜”者继续上述两两比较,知道最后决出“冠军”,这就是n个数的最小值。
我想很容易得知,这样得到最小值共进行了 n-1 次比较操作。
关键是:第二小的数一定是所有与最小值进行过比较的那些数中间的最小值(第二小的一定是曾经被冠军打败过的)。由于最小值一共进行了 log n次比较,因此我们有 log n个candidates. 从这么多数里找最小值需要的比较次数当然是 log n-1。
总共需要的比较次数因此是 n + log n - 2
上面的光排序就需要n*logn了
#include
#define N 5
int main()
{
int i,min=0,smin=-1;//min smin 都是下标
double num[N];
for(i=0;i scanf("%lf",num+i);
for(i=1;i {
if(num[i] min=i;
}
if(min==0) //排除特殊情况,smin赋初值的时候不能与min相同
smin=1;
else
smin=0;
for(i=1;i {
if(smin==min) //如果第二小值与最小值相同不比较
continue;
if(num[i] smin=i;
}
printf("%lf",num[smin]);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
芦海街我想知道这个在什么地方
为什么当当上的Beat耳机那么便宜?
为什么我们大学里的数学叫,高等数学?
现在还有exo星能套餐吗?
中国邮政集团公司云南省砚山县分公司在哪里啊
柯柯达乌在什么地方啊,我要过去处理事情
锦园宾馆地址有知道的么?有点事想过去
QC小组活动记录具体应该写什么内容呢
妞妞精品童装地址在什么地方,想过去办事
中国银行网上银行向外地跨行转账手续费怎么算
阿迪王休闲运动地址在什么地方,想过去办事
豪大大鸡排(宏基广场店)地址有知道的么?有点
花螺用淡水养还是盐水?
如果9x-1.5=0.3那么11.5x 12x-0.8=()
蒲竹塘在哪里啊,我有事要去这个地方
推荐资讯
科技大道/迎宾大道(路口)我想知道这个在什么
铂略企业管理咨询(上海)有限公司黑龙江分公司
豪华阁西餐厅这个地址在什么地方,我要处理点
万盛粮油商行在哪里啊,我有事要去这个地方
库存车能买吗?
深水河小学在哪里啊,我有事要去这个地方
彩凤村地址在哪,我要去那里办事
在中国名人中,长得最帅的人是不是超级太帅呀
电话机挂不断怎么修理
跪求江湖邪y娘全本!!
废品二重身卡组怎么一回合出流天
和利时DCS 53号站既是工程师站又是操作员站和
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?