20220403简单题

20220403简单题

1.HJ40

1.1题目

请添加图片描述

1.2我的解法

python:

s = input()
count_list = [0]*4
for i in s:
    if i.isalpha():
        count_list[0]+=1
    elif i.isdigit():
        count_list[2]+=1
    elif i == ' ':
        count_list[1]+=1
    else:
        count_list[3]+=1
print('\n'.join(map(str,count_list)))

C语言:

#include<stdio.h>

int main(){
    char s[1001];
    gets(s);
    int a_count=0,digit_count=0,space_count=0,other_count=0;
    
    for(int i=0;i<strlen(s);i++){
        if(s[i]==' '){
            space_count+=1;
        }
        else if (s[i]>='0'&&s[i]<='9'){
            digit_count+=1;
        }
        else if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){
            a_count+=1;
        }
        else{
            other_count+=1;
        }
    }
    printf("%d\n%d\n%d\n%d\n",a_count,space_count,digit_count,other_count);
    return 0;
}

1.3改进与优化

  • 使用内置函数对字符类型进行判断

2.HJ51

2.1题目

请添加图片描述

2.2我的解法

#include<stdio.h>
#include<stdlib.h>

struct ListNode
{
    int m_nKey;
    struct ListNode* m_pNext;
};

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        struct ListNode* a = (struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
        a->m_pNext = NULL;
        head = a;
        for(int i=0;i<n;i++){
            struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
            scanf("%d",&tmp->m_nKey);
            tmp->m_pNext = NULL;
            a->m_pNext = tmp;
            a = tmp;
        }

        int key;
        scanf("%d",&key);
        struct ListNode* tmp = head;
        for(int i=0;i<(n-key+1);i++){
            tmp = tmp->m_pNext;
        }
        printf("%d\n",tmp->m_nKey);
    }
    return 0;
}
  • 涉及到链表就不用python写了

2.3链表的相关操作方式

  • 链表初始化
link * initLink(){
    link * p=(link*)malloc(sizeof(link));//创建一个头结点
    link * temp=p;//声明一个指针指向头结点,用于遍历链表
    //生成链表
    for (int i=1; i<5; i++) {
        link *a=(link*)malloc(sizeof(link));
        a->elem=i;
        a->next=NULL;
        temp->next=a;
        temp=temp->next;
    }
    return p;
}
  • 链表查找某节点
int selectElem(link * p,int elem){
    link * t=p;
    int i=1;
    while (t->next) {
        t=t->next;
        if (t->elem==elem) {
            return i;
        }
        i++;
    }
    return -1;
}
  • 链表插入节点
link * insertElem(link * p,int elem,int add){
    link * temp=p;//创建临时结点temp
    //首先找到要插入位置的上一个结点
    for (int i=1; i<add; i++) {
        if (temp==NULL) {
            printf("插入位置无效\n");
            return p;
        }
        temp=temp->next;
    }    
    //创建插入结点c
    link * c=(link*)malloc(sizeof(link));
    c->elem=elem;
    //向链表中插入结点
    c->next=temp->next;
    temp->next=c;
    return  p;
}
  • 链表删除节点
link * delElem(link * p,int add){
    link * temp=p;
    //temp指向被删除结点的上一个结点
    for (int i=1; i<add; i++) {
        temp=temp->next;
    }
    link * del=temp->next;//单独设置一个指针指向被删除结点,以防丢失
    temp->next=temp->next->next;//删除某个结点的方法就是更改前一个结点的指针域
    free(del);//手动释放该结点,防止内存泄漏
    return p;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔耳袋狸Bilby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值