我还以为能很快做出来呢……
看来还是理解能力差啊……
Problem-2078
Problem Description
为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑。xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为100和这门课的难度差的平方。xhd这学期选了n门课,但是一晚上他最多只能复习m门课,请问他一晚上复习的最高效率值是多少?
Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),m(1 <= m <= n)。
接着有n行,每行有一个正整数a(1 <= a <= 100),表示这门课的难度值。
Output
对于每组输入数据,输出一个整数,表示最高效率值。
Sample Input
2
2 2
52
25
12 5
89
64
6
43
56
72
92
23
20
22
37
31
Sample Output
5625
8836
#include<stdio.h>
int main(void)
{
int T,n,m,efficiency;//T组数据,n门课,最多学m门
scanf("%d",&T);
while(T-->0){
int a[39],i,min,c;//min为数组中最小的
for(i=0;i<40;i++)
scanf("%d",&a[i]);
min=a[0];
int b;
for(b=0;b<40;b++){
if(min>a[b])
min=a[b];
}
efficiency=(100-a[1])*(100-a[1]);
c=(a[1]-min)*(a[1]-min);
if(efficiency<c)
efficiency=c;
printf("%d",efficiency);
}
return 0;
}
开始以为给的第一个a值是他的必做科目,之后再从里面挑最简单的科目来计算效率,并与第一个效率进行比较……
发现这样m并没有什么用……
而且n是变量,不一定为20,毛病太多,懒得修改了
其实使用数组也不是不可以,控制好循环次数就行了……
自认为是理解错误,没有提交,重新敲了别的代码
#include<stdio.h>
int main(void)
{
int T,n,m;//T组数据,n门课,学m门
scanf("%d",&T);
while(T-->0){
scanf("%d %d",&n,&m);
int efficiency,eff2,a1,a2;//a1为当前课程难度,a2为下一课程难度
const initial=100;
scanf("%d",&a1);
efficiency=(initial-a1)*(initial-a1);
while(n-->1&&m>1){
scanf("%d",&a2);
if(a2<a1){
eff2=(a1-a2)*(a1-a2);
m--;
a1=a2;
}
if(eff2>efficiency)
efficiency=eff2;
}
printf("%d",efficiency);
}
return 0;
}
第二版,还是认为a1为必做,之后按顺序比较难度,挨个进行计算,敲完代码后发现output与sample不符,用计算器算了一下,发现这题就是就是寻找一组数里的最小值啊(╯‵□′)╯炸弹!•••*~●
#include<stdio.h>
int main(void)
{
int T,n,m;//T组数据,n门课,学m门
scanf("%d",&T);
while(T-->0){
scanf("%d %d",&n,&m);
int efficiency,a1,a2;//a1为当前课程难度,a2为下一课程难度
const initial=100;
scanf("%d",&a1);
while(n-->1){
scanf("%d",&a2);
if(a2<a1){
a1=a2;
}
}
efficiency=(initial-a1)*(initial-a1);
printf("%d\n",efficiency);
}
return 0;
}
5分半看题,16分钟敲第一版,18分01秒敲第二版……
吃完饭花了2分36秒把第二版改成第三版,又花了3分05秒调试,终于AC了……
我又成为分母了……
大佬们都在讲什么贪心算法,听不懂╥﹏╥…
2019年1月16日17点36分
2019年1月16日18点48分 添加了Debug后的第三版代码