题目:P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int n;
int x=1,y=0;
int k=1;
int a[10][10];
signed main(){
cin>>n;
while(k<=n*n){
while(y<n&&!a[x][y+1])a[x][++y]=k++;
while(x<n&&!a[x+1][y])a[++x][y]=k++;
while(y>1&&!a[x][y-1])a[x][--y]=k++;
while(x>1&&!a[x-1][y])a[--x][y]=k++;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}
从这道题学会的:
- 循环得灵活应用
- 怎样让二维数组的数按顺序变化
题目:P1319 压缩技术 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
#include<cstring>//事实上没有用
using namespace std;
int main()
{
int n;
cin>>n;
//矩阵长宽
int Map[n*n+10];
//设置一个登记用的数组,其实n*n就够了,+10是为了防爆
int Full;//输入要用的
bool Key=false;
//判断当前输入的是1的数量还是0的数量,初始为0
int p=0;
//已经登记到第几个数,类似于指针
while(cin>>Full)//持续输入
{
int i;
for(i=p;i<p+Full;i++)
Map[i]=Key;//把这一块区域登记为Key,就是0或1
p=i;
Key=!Key;
//本文唯一难点,
/*
*“!”表示相反,
*如果原先为true就变为false
*如果原先为false就变为true
*这里就把“0和1的数量交替输入”体现出来了
*/
}
p=0;
//指针归零,下面要开始从头开始输入
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<Map[p];
p++;
//输出
}
cout<<endl;
/*按格式输出*/
}
}
从这道题学会的:
- 学会用指针来控制输出
- 用布尔类型和循环来控制输出数据
- 将二位数组形式的答案,以一维数组的方式输出