有问题就有答案
Q1:20个有序数组,每个数组有500个数字,取出这10000个数字中最大的500个,怎么做?
使用长度为500的链表。将第一个数组的数据保存到链表中。取出剩余数组中的每个数字,从头到尾进行比较。如果大于当前值,请移除链接列表末尾的节点,分配一个新值并将其插入到链接列表中。最后一个是最大的500。
Q2:产生20个0~1000的随机整数,放入一个数组中,然后输出这20个整数中大于500的所有整数之和。
#include#include//包含time函数,因为下面使用了函数time () void main () {intnum [20],I,sum=0;srand((int)time());//这句话是为了在下面生成不同的随机数而设置随机种子。你可以百度一个很简单的为(I=0;i500)sum=num[I];printf("sum=%d ",sum);}//输出我注释了你可能不理解的地方。其他的都应该没问题!
Q3:20个有序数组,每个数组有500个数字,取出这10000个数字中最大的500个,怎么做?
因为是降序,我们可以直接比较每个数组中最大的,一次去掉最大的加法比较简单的方法是把它们都放在一起,取前500个。
Q4:数组中找出最大20个数的算法 思路也可以
你能找到数组中最大的数字吗?如果可以的话,这个会,但它只会多加19个数字。您使用另一个数组来保存;求最大值并减去找到的值;然后搜索;这就够了;
Q5:如何从数组中查找最接近500的数字
如果没有排序,就土一点,扫描一遍所有值。加个变量记录最差距和最差距所在位置。如果已经排序,可以二分查找,速度快。private float getNear(float[] array, float target){if (array.Length == 0) return -1;if (array.Length == 1) return 0; int min = 0;int max = array.Length - 1;int mid = (int)(min + max) /2;while (max - min > 1 ){if (target == array[mid] ) return mid;if (target array[mid]) min = mid;mid = (int)(min + max) /2;}return array[max] - target < target - array[min] ? max : min;}
Q6:从1,2…19,20这20个正整数中每次取出3个数组成一个有序数组(a,b,c),使为a,c的
当b=2时,不同的有序实数对(a,b,c)有2对, 当b=3时,不同的有序实数对(a,b,c)有2对, 当b=4时,不同的有序实数对(a,b,c)有4对, 当b=6时,不同的有序实数对(a,b,c)有6对, 当b=8时,不同的有序实数对(a,b,c)有2对, 当b=10时,不同的有序实数对(a,b,c)有2对, 当b=12时,不同的有序实数对(a,b,c)有2对,一共20对. 故选:B.