逃课去吃鸡?!!!,strcpy
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 ",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 返回值而已 ,这两种写法跟自定义的函数没任何关系。