学习旅程week6

python

  • 1在这里插入图片描述
year,n=map(int,input().split())
list_=[0,31,28,31,30,31,30,31,31,30,31,30,31]
if year%4==0 and year%100!=0 or year%400==0:
    list_[2]=29
print(format(list_[n]))
  • 2
    在这里插入图片描述
def fun(num1, num2): 
    if num1 < num2:
        num1, num2 = num2, num1 

    vari1 = num1 * num2 
    vari2 = num1 % num2  

    while vari2 != 0: 
        num1 = num2  
        num2 = vari2
        vari2 = num1 % num2  

    vari1 /= num2 
    print(num2,end=',') 
    print(int(vari1))

m,n=eval(input())
fun(m,n)

  • 3
    在这里插入图片描述
str=input()
ans=0
for i in str:
    i = i.lower()
    if i in ['a', 'e', 'i', 'o', 'u']:
            ans += 1
print(ans)
  • 4列表

sorted()
功能:对列表进行排序,默认是按照升序排序
不改变原来列表的顺序

a_list=[38,29,87,22,3,4]
b_list=sorted(a_list)
print(b_list)
print(a_list)

结果:
在这里插入图片描述
对列表进行降序:

a_list=[38,29,87,22,3,4]
b_list=sorted(a_list,reverse=True)
print(b_list)
print(a_list)

结果:
在这里插入图片描述

  • 5
    sort()
    功能:对列表进行排序,默认是按照升序排序
    改变原来列表的顺序
a_list=[38,29,87,22,3,4]
a_list.sort()
print(a_list)
  • 6
    reverse()
    功能:对列表中的元素进行翻转存放
a_list=[38,29,87,22,3,4]
a_list.reverse()
print(a_list)
  • 7元组
    元组类似于结构体
    元组切片:
    元组名[开始索引:结束索引:步长]
  • 8检索元素
    方法一:index()方法,可以获取指定元素首次出现的下标:
    index(value,start,end)
a_tuple=('physics','chemistry',2021,2.5)
print(a_tuple.index(2021))

结果:2
方法二:count()方法,统计列表种指定元素出现的次数

a_tuple=('physics','chemistry',2021,2.5)
print(a_tuple.count(2021))

方法三:in 或 not in
返回值为True False

  • 9删除元组
a_tuple=('physics','chemistry',2021,2.5)
del a_tuple
print(a_tuple)

此法为彻底删除,包括定义
在这里插入图片描述

字符串函数

strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。
基本形式为strcmp(str1,str2),
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

内存的存储

栈区:局部变量 函数的形式参数 局部数组
堆区:动态内存分配
静态区:全局变量 静态变量 全局数组

  • 变长数组:
    gcc支持c99标准的:
    在这里插入图片描述

  • 动态内存分配
    在堆里:
    malloc操作:

malloc:int * =(int * )malloc(10 * sizeof ( int ) )
若开辟失败,则返回一个NULL指针:

打印出错误原因:

#include<string.h>
#include<errno.h>
printf("%s\n",strerror(errno));
若正常开辟:
for(int i=0;i<10;i++){
	*(p+i)=i;
}
for(int i=0;i<10;i++){
	printf("%d ",*(p+i));
}

free操作:用来释放动态开辟的空间

free(p);
p=NULL;//不会自动置为空指针,故需要手动

calloc操作:初始化所有空间的每个内容为0

int *p=(int*)calloc(10,sizeof(int));//个数,元素的字节

realloc操作:调整动态内存
1.如果后面的空间足够大,那么会直接在后面追加,并返回原来的地址回去。
2.如果不够用,则重新开辟一块满足需求的空间,把原来内存的数据拷贝进去,并释放掉旧的内存空间,最后返回新的地址。
3.得用一个新的变量来接受realloc函数的返回值。

int * ptr = realloc ( p , m );//m为新的字节大小
if(ptr !=NULL){
	p=ptr;
}
int*p=realloc(NULL,40);
  • 动态内存分配的常见错误:
    1.对空指针的解引用操作
    2.对动态开辟的内存的越界访问
    3.对非动态开辟内存的free
int a=10;
int *p=&a;
*p=20;

free(p);
p=NULL;

4.使用free释放动态开辟内存的一部分

 int *p=(int*)malloc(40)
 if(p==NULL){
 	return 0;
 }
 for(int i=0;i<10;i++){
 	*p++ = i;
 }
 free(p);
 p=NULL;

5.对同一块动态内存的多次释放
6.对动态开辟的空间忘记释放(内存泄漏)

洛谷

在这里插入图片描述用结构体入了魔:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

struct node{
    string x; 
    int num;  
    int len; 
}s[25];

int cmp(node a,node b){
    if(a.len>b.len){
    	return 1;
	}
    if(a.len==b.len&&a.x>b.x){
    	return 1;
	}
    return 0;
}

int main(void){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s[i].x;
        s[i].num=i; 
        s[i].len=s[i].x.size();
    }
    sort(s+1,s+n+1,cmp);
    cout<<s[1].num<<endl;
    cout<<s[1].x<<endl;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值