
用C++实现找出数组中最大的几个数?
如题,加入有整型数组a[100],已经初始化为有效的值,编写算法找出其中最大的十个数,放在数组b[10]中,该如何实现?...
如题,加入有整型数组a[100],已经初始化为有效的值,编写算法找出其中最大的十个数,放在数组b[10]中,该如何实现?
展开
3个回答
展开全部
for (int i = 0; i < 10; ++ i) //将a[0-9]赋值给b[0-9]
{
b[i] = a[i];
}
for (int i = 0; i < 10; ++ i) //将b[]从小到大排序
{
for (int j = i+1; j < 10; ++j)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 10; i < 100; ++i)
{
for (int j = 0; j < 10; ++ j)
{
if (a[i] > b[j])
{
b[j] = a[i];
break;
}
}
}
{
b[i] = a[i];
}
for (int i = 0; i < 10; ++ i) //将b[]从小到大排序
{
for (int j = i+1; j < 10; ++j)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 10; i < 100; ++i)
{
for (int j = 0; j < 10; ++ j)
{
if (a[i] > b[j])
{
b[j] = a[i];
break;
}
}
}
追问
发现几个问题,第二个循环对b进行排序,怎么对a排序了,如果对a排序就不符合原始数组a[100]不动的原则了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-10-06
展开全部
试试,为了省事,a[i]都是用套用式子赋值的,没有手动
#include<stdio.h>
int main(void)
{
int a[100],b[10],i,j,t;
for(i=0,j=0;i<100;i++)
{
a[i]=i-j*2;
j=a[i]%20;
}
for(i=0;i<100;i++)
printf("%3d ",a[i]);
/*******************/
for(i=0;i<10;i++)
{
for(j=i+1;j<100;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
b[i]=a[i];
}
printf("\n*******输出最大的十个数******\n");
for(i=0;i<10;i++)
printf("%3d ",b[i]);
return 0;
}
#include<stdio.h>
int main(void)
{
int a[100],b[10],i,j,t;
for(i=0,j=0;i<100;i++)
{
a[i]=i-j*2;
j=a[i]%20;
}
for(i=0;i<100;i++)
printf("%3d ",a[i]);
/*******************/
for(i=0;i<10;i++)
{
for(j=i+1;j<100;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
b[i]=a[i];
}
printf("\n*******输出最大的十个数******\n");
for(i=0;i<10;i++)
printf("%3d ",b[i]);
return 0;
}
更多追问追答
追问
你好像跟楼上的方法一样,先对原数组进行排序,再一次输出前几项。如果不允许修改原数组呢?
追答
是的,一样,都是对原数组直接择排序,然后取前10项
最简单的办法是用副本数组,就是再定义一个a1[100]
for(i=0;i<100;i++)a1[i]=a[i];
不改变原数组,对副本操做
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先将数组a进行从大到小排序,再取前十个用for语句赋值到b数组中 用冒泡法
int b[10];
int temp;
for(int i=0; i<100; i++)
{
for(int j=0;j<100-i; j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<10;i++)
{
b[i]=a[i];
}
int b[10];
int temp;
for(int i=0; i<100; i++)
{
for(int j=0;j<100-i; j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<10;i++)
{
b[i]=a[i];
}
追问
是个解决办法,但是如果不允许对原数组进行排序呢?
追答
那就再定义一个数组 将原数组的值全都导到里面 再对新的数组排序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询