本文最后更新于 582 天前,其中的信息可能已经有所发展或是发生改变。
第1关:求一组数据中最大的两个数
任务描述
本关任务:利用分治法求一组数据中最大的两个数和最小的两个数。
编程要求
请在右侧编辑器Begin-End
处补充代码,完成本关任务。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 //数据的总个数
1 //此行及以下为具体的每个数据
3
5
7
9
10
8
6
4
2
预期输出:
max1=10 max2=9
min1=1 min2=2
#include <stdio.h>
void main()
{
int num,i;
scanf("%d",&num);
int a[num];
for(i=0;i<num;i++)
scanf("%d",&a[i]);
/********** Begin **********/
int max1 = a[0], max2 = a[0], min1 = 999, min2 = 999;
for(int i = 0;i<num;i++){
if(a[i] > max2){
if(a[i] > max1){
max2 = max1;
max1 = a[i];
}else{
max2 = a[i];
}
}
if(a[i] < min2){
if(a[i] < min1){
min2 = min1;
min1 = a[i];
}else{
min2 = a[i];
}
}
}
printf("max1=%d max2=%d\nmin1=%d min2=%d", max1, max2, min1, min2);
/********** End **********/
}
第2关:求一组数据的和(赶时间乱打的(又不是不能过))
任务描述
本关任务:利用分治法求一组数据的和。
编程要求
请在右侧编辑器Begin-End
处补充代码,完成本关任务,注意需要学生自己获取输入数据再进行操作。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 //数据的总个数
-5 //此行及以下为具体的每个数据
5
10
99
100
30
60
98
-10
-1
预期输出:分治法求出数组元素的和为:386
#include "stdio.h"
/********** Begin **********/
int main()
{
int n,tmp,tot=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&tmp);
tot += tmp;
}
printf("分治法求出数组元素的和为:%d", tot);
return 0;
}
/********** End **********/
第3关:找出数组中第 k 个小的元素(赶时间乱打的(又不是不能过))
任务描述
本关任务:对于给定的 n 个元素的数组a[0:n-1]
,要求从中找出第 k 小的元素。
编程要求
请在右侧编辑器Begin-End
处补充代码,完成本关任务,注意需要学生自己获取输入数据再进行操作。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
10 5 //表示给定10(n)个元素的数组,从中找出第5(k)小的元素
-34 //此行及以下为具体的每个数据
95
-50
67
73
81
-38
10
-11
70
预期输出:第5小的元素是10
#include <stdio.h>
/********** Begin **********/
int FoundNearBig(int *a,int n,int min){
int tmpMin = 1e4;
for(int i=0;i<n;i++){
if(a[i]<tmpMin && a[i]>min){
tmpMin = a[i];
}
}
return tmpMin;
}
int main()
{
int n,k,min=-1e6;
scanf("%d %d", &n, &k);
int a[n],AFsort[k];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<k;i++){
min = FoundNearBig(a,n,min);
}
printf("第%d小的元素是%d", k, min);
return 0;
}
/********** End **********/