快捷搜索: 王者荣耀 脱发

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

经验分享 程序员 微信小程序 职场和发展