新生第一次考核

454 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

第一题:

看清楚题意要输出三行I love acm 注意要输出引号

代码:

#include <stdio.h>



int main()

{

    printf("\"I love acm !\"\n");

    printf("\"I love acm !\"\n");

    printf("\"I love acm !\"\n");

}

第二题: 题解:没有什么好说的签到题顺序走一遍碰到3,4变0输出

代码:

    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++)
    {
        int x;
        scanf("%d",&x);
        if(x == 3 || x == 4)
            printf("0 ");
        else
            printf("%d ",x);
    }

第三题: 题意:给一个数字把里面的所有6提前剩下的顺序输出 由题意可以看出此题排序完都是YES因此无需进行计算, 同时看数据范围大小 可以知道应用字符串输入

题解:先直接输出YES,再开两个循环,第一个判断有6就输出,第二个判断没有6就输出

代码:


#include <string.h>

char a[100];

int main()

{

    scanf("%s",a);

    int len = strlen(a);

    printf("YES\n");

    for(int i = 0;i < len;i ++)

    {

        if(a[i] == '6')

        printf("%c",a[i]);

    }

    for(int i = 0;i < len; i ++)

    {

        if(a[i] != '6')

        printf("%c",a[i]);

    }

}

第四题:emmm没有什么好说的吧,签到题从右往左遍历一遍就是了

代码:

    char s1[] = "gnahcnaN";
    char s2[] = "nahsgnaggnij";
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    int cnt1 = 0,cnt2 = 0;
    for(int i = n - 1;i >= 0;i --)
    {
        if(a[i] == s1[len1 - 1])
        {
            int x = len1 - 1;
            int y = i;
            while(a[y] == s1[x])
            {
                x --;
                y --;
                if(x < 0)
                break;
            }
            if(x < 0)
            {
                cnt1++;
                y++;
                i = y;
            }
        }
        if(a[i] == s2[len2 - 1])
        {
            int x = len2 - 1;
            int y = i;
            while(a[y] == s2[x])
            {
                x --;
                y --;
                if(x < 0)
                break;
            }
            if(x < 0)
            {
                cnt2++;
                y++;
                i = y;
            }
        }
    }
    if(cnt1>=cnt2)
        printf("nanchang\n");
    else
        printf("jinggangshan\n");

第五题:

题意:

告诉你一共有m个灯还有n次操作,接下来n次操作每次可以关几盏灯,是什么灯

题解:因为小明可以随便按按钮,所以只要按钮上连接过的灯都可以被点亮。所以只要有灯没有被按钮连接过就输出NO,否则输出YES。

用数组表示1~m的灯,0为熄灭,1为被点亮

循环判断是否存在未被点亮的灯

代码:

         int a[110] = {0};  //用数组表示1~m的灯,0为熄灭,1为被点亮

        int n,m;

        scanf("%d%d", &n, &m);

    

        while (n -- )

        {

            int c, b;

            scanf("%d", &c);

            for (int j = 0; j < c; j ++ )

            {

                scanf("%d", &b);

                a[b] = 1;  // 被连接过即可以被点亮

            }

        }

        int flag = 0;

        for(int i = 1; i <= m; i ++)  // 循环判断是否存在未被点亮的灯

        {

            if(a[i] == 0)  // 如果存在

            {

                flag = 1;

                break;

            }

        }

        if(flag == 1) puts("NO");

        else puts("YES");

第六题:

题解:小明找朋友要想走的步数最小,那肯定每步都走最大,也就是每步尽量走5个单位,最后不足5个单位补1步就行。

代码:

        int n;

        scanf("%d", &n);

    

        if(n % 5 == 0) printf("%d\n", n/5);

        else printf("%d\n", n/5 + 1); 

第七题:

题解: 因为路径比较少,把所有的情况列出来比较就行。

代码:

        int d1,d2,d3;

        scanf("%d%d%d", &d1, &d2, &d3);

        int a,b,c,d,num;

        a = d1 + d2 + d3;

        b = (d1 + d3) * 2;

        c = (d2 + d3) * 2;

        d = (d1 + d2) * 2;

        if(a <= b && a <= c && a <= d) num = a;

        if(b <= a && b <= c && b <= d) num = b;

        if(c <= a && c <= b && c <= d) num = c;

        if(d <= a && d <= b && d <= c) num = d;

        printf("%d\n", num);

第八题:

题解:本题只要统计字符’1’,’2’,’3’出现的次数,然后再依次输出就行。(注意如何补’+’)

代码;

         scanf("%s", ch);

        for (int i = 0; i < 110; i ++ )

        {

            if(ch[i] == '1') a ++;

            else if(ch[i] == '2') b ++;

            else if(ch[i] == '3') c ++;

        }

        int num = a + b + c;

        while(a --)

        {

            printf("1");

            d ++;

            if(d < num) printf("+");

        }

        while(b --)

        {

            printf("2");

            d ++;

            if(d < num) printf("+");

        }

        while(c --)

        {

            printf("3");

            d ++;

            if(d < num) printf("+");

        }

第九题:

其实和第11题一样就吧重复了,就是一个等差数列求和公式

1+nn/2(1+n)*n/2

代码就不贴了,这个应该都会

第十题:

题解:因为掷骰子得到的结果只有6种可能性,依次枚举统计结果即可。

代码:

        int a, b, x = 0, y = 0, z = 0;

        scanf("%d%d", &a,&b);

        for(int i = 1; i <= 6; i ++)

        {

            int aa = abs(i-a), bb = abs(i-b);

            if(aa > bb) z ++;

            else if(aa == bb) y ++;

            else x ++;

        }

        printf("%d %d %d\n",x,y,z);

第11题和第9题一样就不说了

总体来说题目偏简单,没有区分度 签到题:1,2,9 简单题:3,4,6,10,7 中等题:5,8,11