Description
xxx 吃鸡成瘾。为此他决定逃课吃鸡!
但是学校有规定,旷课到一定次数,是不给予期末考的资格的。
因此 xxx 决定每门课最多逃两次。
现在告诉你,一个学期有 n 节课程,第 i节课的科目是si 时间为 ti
你需要告诉 xxx 这个学期他逃课吃鸡的最大时间是多少。
Input
第一行给出一个整数(1≤n≤10 000)为该学期课程节数。
接下来n行,第i+1行给出第i节课的科目si 和时间ti, 中间用空格隔开si由小写字母组成1≤|si|≤10
1≤ti≤10 0001若si=sj则认为第i节课和第j节课是同一门课。
Output
输出xxx该学期逃课吃鸡的最大时间。
Sample Input 1
7
english 2
english 1
math 3
english 3
cook 5
eatchicken 10
cook 5
Sample Output 1
28
python.emmmmmm…
开始看见这个题的时候第一反应是python的代码,
n=int(input())
I=[[x for x in input().split()]for i in range(n)] #用二维列彪接收课程名称和时间,默认字符型
for i in range(n):
I[i][1]=int(I[i][1]) #把时间转化成整型
I.sort(key=lambda x:[-x[1]]) #对二维列表中时间进行从大到小的排序
N=[] #建立一个空列表,用来接收已经逃过的课的课程名称啊
a=0
for i in range(n):
if N.count(I[i][0])<2: #如果没有逃过两节课呢,就逃!!
a=a+int(I[i][1])
N.append(I[i][0])
print(a)
当然了,以后每做一道题,都要用c
接下来就是漫长的,探索c的代码。。
#include<stdio.h>
#include<string.h>
void main()
{
int n;
scanf("%d",&n); //输入n一共有n行数据
char I[10000][20],z[20]; //因为一维字符型数组中只能存储一个字符,所以要定义一个10000行20列的二维列表
int L[10000]; //用I列表接受课程名称,用L列表接受对应的时间
int i;
for(i=0;i<n;i++) //用循环完成输入,开始竟然写成了i==0啊啊啊啊啊啊啊啊啊难受
{
scanf("%s %d",I[i],&L[i]); //字符串输入不需要用&。。注意啊
}
int e;
for(e=0;e<n;e++) //模拟冒泡排序 ,,对每节课的时间 从大到小排序
{
int j;
for(j=0;j<n-e-1;j++)
{
if(L[j]<L[j+1]) //排序知识针对时间啊,但是时间交换的时候,I数组中对应的课程名称也要交换
{
strcpy(z,I[j]); //不知道该怎么说,,啊当时被卡了半天
strcpy(I[j],I[j+1]);
strcpy(I[j+1],z);
int tmp2;
tmp2=L[j];
L[j]=L[j+1];
L[j+1]=tmp2;
}
}
}
char m[10][20]; //定义一个新列表,用来接受逃了的课的名称
int a=0;
int p=0;
int k,s;
int b;
for(k=0;k<n;k++) //遍历输入的每一节课程
{
b=0;
for(s=0;s<100;s++) //b表示已经逃过多少次这节课了,就理解成相当于python中的,b=I.count(某某)吧
{
if(m[s][2]==I[k][2])b += 1;
}
if(b<2) //如果这节课还没有超过2次逃过,就确定要逃这节课了
{
a=a+L[k];
char Z[20]; // 这4行就是m[p]=I[k];这个意思,但是不能直接这么写啊
strcpy(Z,m[p]);
strcpy(m[p],I[k]);
strcpy(I[k],Z);
p=p+1;
}
}printf("%d\n",a);
}
探索void main 和 int main的区别
void main 和 int main的区别就是有无返回值啊
在int main 可以出现非 int 类型的东西,比如char类型啊
在写代码时,一个函数要么有返回值,要么没有返回值,没有返回值就用void来表示。
main函数同样的,在没有返回值时加个void 。
有的编译器必须main要有返回值 int , 那就写成int main 。
至于什么时候需要哪种写法,不必有这种顾虑,你可以一律都写成 int main ,
然后在方法体中 最后加个return 0 ;就行了,
这样写法没有哪个编译器不通过的吧。
void main 和 int main 在作用上其实没什么区别啊,
只是有的严谨的编译器必须要main有int 返回值而已
,这两种写法跟自定义的函数没任何关系。