Python学习
1.列表list
2.字典dic
实现原理:根据key查找value所在位置。(哈希表)
特点:①字典内所有元素都是一个key-value对,key不允许重复且不可变,value可以重复;②元素无序。
3.元组tuple
4.集合set
集合是没有value的字典。
寒假作业:不太会做,对别人的代码加注释进行理解
#include<iostream>
#include<string>
using namespace std;
bool compare(string a,string b)
{
if(a+b>=b+a)//ab>=ba,这个时候不需要交换
return false;
return true;//ab<ba,这个时候需要交换
}
int main()
{
int n;
cin>>n;
string arr[20],temp;
for(int a=0;a<n;a++)
cin>>arr[a];//将整数作为字符串数组元素存入
for(int i=0;i<n-1;i++)
for(int j=n-1;j>i;j--)
if(compare(arr[j-1],arr[j])) //如果为true则交换,
{
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
for(int k=0;k<n;k++){
cout<<arr[k];
}
cout<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
vector<int>mp[maxn];/*向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样
它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。*/
int n, m;
int tot = 0;
//初始化地图
void init(){
for(int i = 0; i < maxn; i++)
mp[i].clear();
tot = 0;
}
//判断是否为边界
bool judge(int i, int j) {
if(i == 0 || i == n-1 || j == 0 || j == m-1) return true;
return false;
}
void dfs(int i, int j) {
if(mp[i][j] == 0 || mp[i][j] > 1) return;//该点为'#'或者有边界走到过该点了,则可以不用搜该点下面的路了直接返回
mp[i][j]++;//对k从边界可以走到的点都进行加一,走到了才能加一,不能先加一再走,否则上面的终止判断会出错
for(int k = 0; k < 4; k++) {//对'.'上下左右的点进行判断
int xx = i + dx[k];
int yy = j + dy[k];
if(xx >= 0 && xx < n && yy >= 0 && yy < m) dfs(xx, yy);//递归走周围的点
}
}
int main() {
while(scanf("%d%d",&n, &m) != EOF) {
init();
char c[maxn];
//将地图转化为1,0表示的地图
for(int i = 0; i < n; i++) {
scanf("%s", c);
for(int j = 0; j < m; j++) {
if(c[j] == '.' ) mp[i].push_back(1);//push_back():在Vector最后添加一个元素(参数为要插入的值)
else
mp[i].push_back(0);
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(mp[i][j] && judge(i, j)) dfs(i,j);//只对边界上的.进行搜索
}
}
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
if(mp[i][j] > 1)tot++;//大于1的点,表示由边界出发可以走到的点,也就是可以到达边界的点
printf("%d\n", n*m-tot);
}
return 0;
}