开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 31 天,点击查看活动详情
【深基5.习6】蛇形方阵
题目描述
给出一个不大于 的正整数 ,输出 的蛇形方阵。
从左上角填上 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 个字符,前面使用空格补齐。
输入格式
输入一个正整数 ,含义如题所述。
输出格式
输出符合题目要求的蛇形矩阵。
样例 #1
样例输入 #1
4
样例输出 #1
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
数据保证,。
#include<bits/stdc++.h>
using namespace std;
//记录输出的数组
int a[15][15];
//改变位置的数组
int pos[4][2]={0,1,1,0,0,-1,-1,0};
int main(){
int n;
cin >> n;
int x = 1, y = 1; // 当前位置
int d = 0; // d 记录头朝向
for(int i=1; i<=n*n; i++){
// a 用于记录输出
a[x][y] = i;
// tx和 ty用于检查是否需要转向(是否需要修改 d)
int tx = x + pos[d][0];
int ty = y + pos[d][1];
// 如果越界或以前填过,则修改 d
if(tx<1 || tx>n || ty<1 || ty>n || a[tx][ty]) d=(d+1)%4;
// 当处理完 d 后,就正式修改 x和y了
x += pos[d][0];
y += pos[d][1];
}
// 输出
for(int i = 1; i<=n; i++) {
for(int j = 1; j<=n; j++) {
printf("%3d", a[i][j]);
}
cout << endl;
}
return 0;
}
【深基5.习7】杨辉三角
题目描述
给出 ,输出杨辉三角的前 行。
如果你不知道什么是杨辉三角,可以观察样例找找规律。
样例 #1
样例输入 #1
6
样例输出 #1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
代码
#include<bits/stdc++.h>
using namespace std;
int a[21][21];
int main() {
int n;
cin >> n;
for(int i = 1; i<=n; i++) {
a[i][1] = a[i][i] = 1;
}
for(int i = 1; i<=n; i++) {
for(int j = 2; j<i; j++) {
a[i][j] = a[i-1][j] + a[i-1][j-1];
}
}
for(int i = 1; i<=n; i++) {
for(int j = 1; j<=i; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
压缩技术
题目描述
设某汉字由 的 和 的点阵图案组成。
我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 ,第二个数表示接下来连续有几个 ,第三个数再接下来连续有几个 ,第四个数接着连续几个 ,以此类推……
例如: 以下汉字点阵图案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是: (第一个数是 ,其余各位表示交替表示0和1 的个数,压缩码保证 交替的各位数之和)
输入格式
数据输入一行,由空格隔开的若干个整数,表示压缩码。
输出格式
表示最后的汉字点阵图(点阵符号之间不留空格)。
样例 #1
样例输入 #1
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
样例输出 #1
0001000
0001000
0001111
0001000
0001000
0001000
1111111
提示
数据保证,。
代码
#include<bits/stdc++.h>
using namespace std;
int t = 0; // 判断有没有回车
bool flag = 1; // 判断输出什么
int s = 0; // 判断有没有输完
int main(){
int n;
cin >> n;
int val;
while(s < n*n) {
flag = !flag;
cin >> val;
for(int b = val; b >= 1; b--) {
// 首先判断是否需要回车,回车后t要清零
if(t == n) {
cout << "\n";
t = 0;
}
cout << flag;
t++;
s++;
}
}
return 0;
}