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;
}