背景:
最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。
输入:
第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l
输出:
如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “bit is doomed! ”
#include<stdio.h>
int* sort(int arr[], int x);//给数组中元素排序的函数
int main(void)
{
int m, n, i, j;
scanf("%d %d", &m, &n);
int* arr_m_sort, * arr_n_sort;
int arr_m[100] = { 0 }, arr_n[100] = { 0 };
for (i = 0; i < m; i++)
{
scanf("%d", &arr_m[i]);
}
for (i = 0; i < n; i++)
{
scanf("%d", &arr_n[i]);
}
arr_m_sort = sort(arr_m, m);
arr_n_sort = sort(arr_n, n);
int cnt = 0, x = 0;
int ysh[100] = { 0 };
if (n < m)
printf("bit is doomed!\n");
else
{
for (i = 0; i < m; i++)
{
for (j = x; j < n; j++)
{
x++;
if (arr_m_sort[i] <= arr_n_sort[j])
{
ysh[cnt] = arr_n_sort[j];
cnt++;
break;
}
}
}
if (cnt == m)
{
int sum = 0;
for (i = 0; i < cnt; i++)
{
sum += ysh[i];
}
printf("%d\n", sum);
}
else
printf("bit is doomed!\n");
}
return 0;
}
int* sort(int arr[], int x)
{
int i, j, p, t;
for (i = 0; i < x - 1; i++)
{
p = i;
for (j = i + 1; j < x; j++)
{
if (arr[p] > arr[j])
p = j;
}
if (p != i)
{
t = arr[p];
arr[p] = arr[i];
arr[i] = t;
}
}
return arr;
}
本人C语言菜鸟一枚,代码不当或可以改进的地方欢迎大家讨论交流。