2 xsxshxs2 xsxshxs2 于 2015.05.31 12:30 提问

请大家帮我解答下,谢谢了

【问题描述】
从前有一个班级有n个小朋友。
现在你获得了这个班级某次考试每个人的成绩,你打算将这些小朋友分成n/2个二人组:排名第一的同学和倒数第一的同学分一组,排名第二的同学与倒数第二的同学分一组,以此类推。
我们定义一个小组的“差异值”为:这一组中分数高的同学的分数减去分数低的同学的分数。请你求出所有小组的差异值之和。
【输入格式】
第一行有一个整数n,表示小朋友的数量
第二行有n个整数,第i个数表示第i个小朋友的成绩
【输出格式】
输出一个正整数,表示所有小组的差异值之和
【输入样例】
6
100 97 86 59 71 81
【输出样例】
72
谢谢

4个回答

caozhy
caozhy   Ds   Rxr 2015.05.31 13:28
已采纳

题目说的很清楚了,直接计算就可以了。
如果需要完整代码,请先采纳。

xsxshxs2
xsxshxs2   2015.05.31 13:54

求代码啊啊啊啊啊啊啊啊啊

caozhy
caozhy   Ds   Rxr 2015.05.31 14:32
6
100 97 86 59 71 81
scores: 100 97 86 59 71 81
after sorting: 59 71 81 86 97 100
72
Press any key to continue 
caozhy
caozhy   Ds   Rxr 2015.05.31 14:31

#include "stdio.h"
#include "stdlib.h"

int * data;

int cmp(const void * a, const void * b)
{
    return *(int *)a - *(int *)b;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    data = (int *)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++)
        scanf("%d", &data[i]);
    printf("scores: ");
    for (i = 0; i < n; i++)
        printf("%d ", data[i]);
    qsort(data, n, sizeof(int), cmp);
    printf("\nafter sorting: ");
    for (i = 0; i < n; i++)
        printf("%d ", data[i]);
    int sum = 0;
    for (i = 0; i < n / 2; i++)
        sum += (data[n - i - 1] - data[i]);
    printf("\n%d\n", sum);
    return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!