一.这段时间的学习
数组这个东西,我第一次使用是在循环语句的习题里,由于那时运用的比较熟练,我本以为数组的东西全搞明白了但做了第四组我才发现我这个想法是完全错误的。从第四章的第九题开始,一道比一道“新”的设定和算法的思路让我意识到了我还是差的很远,再加上数组的第21题,我感觉是用到了我们从来没学过的东西,周五晚上我一共敲了三个代码,用了整整4.5小时,也是自闭了一晚上,在百度搜了一晚上相关知识把set和字符串基本从头学了一遍,然后试了20遍才敲出来。当然,这是痛与快乐并存的,花了时间若能有提升,总是有好处的!
二.相关习题及思路
1.矩阵交换行
#include<iostream>
using namespace std;
int main()
{int n,i,j,m;
int a[6][6];
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
{
cin>>a[i][j];
}
}
cin>>m>>n;
for(j=1;j<=5;j++)
swap(a[m][j],a[n][j]);
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
{cout<<a[i][j]<<\" \";}
cout<<endl;}
return 0;
}
这道题我没用基本的多重循环嵌套,而是用了\"swap\"这个交换数据的指令,这个可以节省很多空间
2.细菌的繁殖与扩散
#include<iostream>
using namespace std;
int m,n;
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
int a[5][10][10];
int main()
{
cin>>m>>n;
a[0][5][5]=m;
for(int k=1;k<=n;k++)
{
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
a[k][i][j]=2*a[k-1][i][j];
for(int l=0;l<8;l++)
{
int nx=i+dx[l],ny=j+dy[l];
if(nx>0&&nx<=9&&ny>0&&ny<=9)
a[k][i][j]+=a[k-1][nx][ny];
}
}
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
cout<<a[n][i][j]<<\' \';
cout<<endl;
}
}
3.蛇形填充数组
#include<cstdio>
int t=1,a[15][15];
int main(){
int n,i,j;
scanf(\"%d\",&n);
i=j=1;
while(t<=n*n)
{
while(1)
{
if(i<1||j>n)
{
i++;j--;break;
}
else{
a[i][j]=t;t++;i--;j++;
}
}
if(j==n) i++;
else if(i==1) j++;
while(1)
{
if(i>n||j<1)
{
j++;i--;break;
}
else{
a[i][j]=t;t++;i++;j--;
}
}
if(i==n) j++;
else if(j==1) i++;
}
for(i=1;i<=n;i++){
for(j=1;j<n;j++)
printf(\"%d \",a[i][j]);
printf(\"%d\\n\",a[i][n]);
}
}
4.变换的矩阵
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n,i,j,k,t=0,e=0,r,w=0,z=0;
char a[15][15],b[15][15];
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>b[i][j];
for(i=1;i<=n;i++)
{
for(k=1,j=n;j>=1;j--,k<=n) {
if(a[j][i]==b[i][k++])
t++;
}
}
for(k=1,k<=n,i=n;i>=1;i--,k++)
{
for(j=1;j<=n;j++)
{
if(a[j][i]==b[k][j]) e++;
}
}
for(k=n,k<=1,i=1;i<=n;i++,k--)
{
for(r=n,r<=1,j=1;j<=n;j++,r--)
{
if(a[i][j]==b[k][r])
w++;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==b[i][j])
z++;
}
}
if(t==n*n) cout<<\"1\";
else if(e==n*n) cout<<\"2\";
else if(w==n*n) cout<<\"3\";
else if(z==n*n) cout<<\"4\";
else cout<<\"5\";
return 0;
}
5.字符串hash
#include <iostream>
#include <set>
using namespace std;
int main()
{
int n;
scanf(\"%d\",&n);
int sum=0;
for(int i=1;i<=n;i++)
{string t;
set<string> s;
while(cin >> t) s.insert(t);
sum+=s.size();}
cout<<sum;
return 0;
}
三.总结
距离期末考试大概没多长时间了,接下来这段时间还有一套综合题可以用来练手,充分利用这段时间,尽量每天都敲敲代码防止手生,尽量拿一个比较满意的成绩吧!
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。





