算法设计与分析实训3–分治法挑战
本文最后更新于 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  **********/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇