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