首页 > 编程语言 >牛客编程题

牛客编程题

时间:2024-03-26 20:01:31浏览次数:28  
标签:int 编程 retStr len 牛客 str array data

提示:文章

文章目录

前言

前期疑问:
本文目标:


一、背景

最近

二、

2.1 坐标移动

https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29?tpId=37&tqId=21240&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "stdbool.h"

typedef struct {
    char a;
    int len;
} moveData;

bool isTargetStr(char* str) {
    int len = strlen(str);
    if(len < 2)
    {
        return false;
    }
    if (!isalpha(str[0])) {
        return false;
    }
    for (int i = 1; i < len; i++) {
        if (!isdigit(str[i])) {
            return false;
        }
    }

    return true;
}

void getData(char* str, char* c, int* len) {
    *c = str[0];
    *len = atoi(&str[1]);
}

int* calculateDst2(moveData* data, int count, int array[]) {
    for (int i = 0; i < count; i++) {
        if (data[i].a == 'a') {
            array[0] = array[0] - data[i].len;
        } else if (data[i].a == 'd') {
            array[0] = array[0] + data[i].len;
        } else if (data[i].a == 'w') {
            array[1] = array[1] + data[i].len;
        } else if (data[i].a == 's') {
            array[1] = array[1] - data[i].len;
        }
    }

    return array;
}

void calculateDst(moveData* data, int count, int (*array)[]) {
    for (int i = 0; i < count; i++) {
        if (data[i].a == 'a') {
            *(*array) = *(*array) - data[i].len;
        } else if (data[i].a == 'd') {
            *(*array) = *(*array) + data[i].len;
        } else if (data[i].a == 'w') {
            *(*array + 1) = *(*array + 1) + data[i].len;
        } else if (data[i].a == 's') {
            *(*array + 1) = *(*array + 1) - data[i].len;
        }
    }
}

moveData data[10000];
int main() {
    char str[10000];
    char retStr[50] = {'\0'};
    //while (gets(str) != NULL) { // 注意 while 处理多个 case
    while (scanf("%s", str) != EOF) {
        // 64 位输出请用 printf("%lld") to
        int len = strlen(str);
        char dstStr[10000] = {'\0'};
        int moveDataIndex = 0;
        int index = 0;
        for (int i = 0; i < len ; i++) {
            if (str[i] == ';') {
                continue;
            }
            while (str[i] != ';') {
                dstStr[index++] = str[i++];
            }
            index = 0;

            if (isTargetStr(dstStr)) {
                char charater;
                int length;
                getData(dstStr, &charater, &length);
                data[moveDataIndex].a = tolower(charater);
                data[moveDataIndex].len = length;
                moveDataIndex++;
            }
            memset(dstStr, '\0', sizeof(dstStr));
        }
        int array[2] = {0};
        calculateDst(data, moveDataIndex, &array);

        snprintf(retStr, sizeof(retStr), "%d", array[0]);
        int retStrIndex = strlen(retStr);
        retStr[retStrIndex] = ',';
        snprintf(&retStr[retStrIndex + 1], sizeof(retStr), "%d", array[1]);
        printf("%s", retStr);
    }
    return 0;
}

下面是第一版有问题的版本

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "stdbool.h"

typedef struct {
    char a;
    int len;
} moveData;

bool isTargetStr(char* str) {
    int len = strlen(str);
    if (!isalpha(str[0])) {
        return false;
    }
    for (int i = 1; i < len; i++) {
        if (!isdigit(str[i])) {
            return false;
        }
    }

    return true;
}

void getData(char* str, char* c, int* len) {
    *c = str[0];
    //printf("%s\n", &str[1]);
    *len = atoi(&str[1]);
}

int* calculateDst(moveData* data, int count, int array[]) {
    for (int i = 0; i < count; i++) {
        if (data[i].a == 'a') {
            array[0] = array[0] - data[i].len;
        } else if (data[i].a == 'd') {
            array[0] = array[0] + data[i].len;
        } else if (data[i].a == 'w') {
            array[1] = array[1] + data[i].len;
        } else if (data[i].a == 's') {
            array[1] = array[1] - data[i].len;
        }
    }

    return array;
}

moveData data[10000];
int main() {
    char str[10000];
    char retStr[50] = {'\0'};
    //while (gets(str) != NULL) { // 注意 while 处理多个 case
    while (scanf("%s", str) != EOF) {
        // 64 位输出请用 printf("%lld") to
        int len = strlen(str);
        char dstStr[10000] = {'\0'};
        int moveDataIndex = 0;
        int index = 0;
        for (int i = 0; i < len ; i++) {
            if (str[i] != ';') {
                dstStr[index++] = str[i];
            }
            else {
                index = 0;
                i++;
            }
            
            if (isTargetStr(dstStr)) {
                char charater;
                int length;
                getData(dstStr, &charater, &length);
                printf("%c %d", charater, length);
                data[moveDataIndex++].a = tolower(charater);
                data[moveDataIndex++].len = length;
            }
        }
        int array[2] = {0};
        //array = calculateDst(data, moveDataIndex, array);
        calculateDst(data, moveDataIndex, array);
        //printf("%d %d", array[0], array[1]);

        snprintf(retStr, sizeof(retStr), "%d", array[0]);
        int retStrIndex = strlen(retStr);
        retStr[retStrIndex] = ',';
        snprintf(&retStr[retStrIndex + 1], sizeof(retStr), "%d", array[1]);
        //itoa(array[0], retStr, 10);
        //retStr[1] = ',';
        //retStr[2] = itoa(array[1]);
        printf("%s", retStr);
    }
    return 0;
}

2.2

三、

3.1


总结

未完待续

标签:int,编程,retStr,len,牛客,str,array,data
From: https://blog.csdn.net/2301_77560238/article/details/137037628

相关文章

  • 【蓝桥杯省赛真题33】python单词排序 中小学青少年组蓝桥杯比赛 算法思维python编程省
     目录python单词排序一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、 推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python单词排序第十三届蓝桥杯青少年组python比赛省赛真题一、题目要求(注:input......
  • 使用 Amazon Bedrock + Claude 3 打造个性化智能编程助手
    最近,随着人工智能技术的迅速发展,代码助手已经成为软件开发领域备受关注的工具。像AmazonCodeWhisperer和GithubCopilot这样的工具可以在集成开发环境中帮助用户自动生成代码,极大地提高了开发效率。然而,这些助手通常缺乏直接执行代码的能力,需要额外集成开发环境来执行代码。......
  • 7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记
    背景说来惭愧,7年的web编程生涯,一直没有真正系统的学习web安全知识(认证和授权除外),这个月看了一本《Web安全设计之道》,书中的内容多是从微软官方文档翻译而来,这本书的含金量不高,不过也不能说没有收获,本文简单记录一下我学习Web安全方面的笔记。本文不涉及IIS、Wind......
  • 编程语言|C语言——C语言标识符的命名规则
    1.标识符简介在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。标识符可以简单认为是一个名字,用来标识变量名、常量名、函数名及数组等。变量名a、b、c,符号常量名PI、Pai,函数名printf、scanf等都是标识符。2.标识符命名规......
  • PTA基础编程题目集 6-10 阶乘计算升级版
    阶乘计算升级版本题要求实现一个打印非负整数阶乘的函数。函数接口定义:voidPrint_Factorial(constintN);其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalidinput”。裁判测试程序样例:#include<stdio.h>......
  • Python函数式编程自带函数
    一.map函数需求1:num1=[1,2,3,4],我的需求是把num1中的每个元素平方后组成新列表。ret=[]num1=[1,2,3,4]foriinnum1:ret.append(i**2)print(ret)#输出结果:>>>[1,4,9,16]需求2:如果有1万个列表呢,怎么办?思路:如果用for循环,当然功能上是没问题的,但是需要......
  • 为什么自学编程很难找到工作?
    IT行业的竞争变得更加激烈,因为许多人都意识到了这个领域的发展潜力,导致岗位竞争日益加剧。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战,还提供了丰富的源代码。如果你渴望学习编程,不妨点个关注,给个评论222,私信22,我在后台发给你。同时,AI技术的崛起也对传统的编程......
  • 零基础如何自学编程?用这6种方法就够了!
    前言自学编程的过程中,一部分程序员遇到冰冷的英语字母,枯燥的编程教程,果断选择了放弃。但其实自学编程不是那么难,只要是理工科生、逻辑思维还行的小伙伴,编程入门完全可以。对于初学者来说,可以采用视频+书籍的方式进行学习。这两种方式形成互补关系。编程教学视频可以让......
  • 结对编程--自动生成小学四则运算
    小学四则运算题目生成这个作业属于哪个课程软件工程2024这个作业要求在哪里结对项目这个作业的目标完成结对项目,共同合作实现自动生成小学四则运算题目参与人员温泽坤3122004582、黄浩3122004571作业github地址PSP2.1表格PSP2.1PersonalSoftwareP......
  • c语言编程题目:水仙花数
    题目:水仙花数是指一个N位正整数(N>=3),它的每位上的数字的N次幂之和等于它本身。例如:153=1^3+5^3+3^3。要求:计算所有N位水仙花数。给出一个正整数N(3<=N<=7),按递增顺序输出所有水仙花数,每个数字占一行。编程思路分析:输入一个正整数N。N为位数,N=3就表明是3位数。判断N位......