最好的草 | 扫雷 |
输出杨辉三角的前N行 | 孤独的偶数 |
是否相邻 |
最好的草
这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,
一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。
输入
第一行包含两个整数R和C,中间用单个空格隔开。
接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1
<= R, C <= 100 )
输出
输出一个整数,表示草丛数。
. # . . . .
. . # . . .
. . # . . #
. . . # # .
. # . . . .
描述
奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。
它想计算一下牧场中的草丛数量。
在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。
给定牧场地图,计算有多少个草丛。
例如,考虑如下5行6列的牧场地图
#include<iostream>
using namespace std;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int main() {
char a[100][100];
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == '#') {
cnt++;
a[i][j] = '.';
for (int k = 0; k < 4; k++) {
int x = i+dx[i];
int y = j+dy[i];
if (a[x][y] == '#') {
a[x][y] = '.';
break;
}
}
}
}
}
cout << cnt << endl;
}
扫雷
描述
扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里
是否是地雷。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。
输入
第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n
<= 100, 1 <= m <= 100。
接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相
应格子中无地雷。字符之间无任何分隔符。
输出
n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’
表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。
#include<iostream>
using namespace std;
int x[8]={0,1,0,-1,-1,1,1,-1};
int y[8]={1,0,-1,0,1,1,-1,-1};
char a[100][100];
int b[110][110];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='*'){
for(int k=0;k<8;k++){
int tx=x[k]+i;
int ty=y[k]+j;
b[tx][ty]++;
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='*') cout<<"* ";
else cout<<b[i][j]<<" ";
}
cout<<endl;
}
}
输出杨辉三角的前N行
题目描述
输出杨辉三角的前N行(N<10)。
输入
输入只有一行,包括1个整数N。(N<10)
输出
输出只有N行.
样例
输入复制
5
输出复制
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
long long a[11100];
for(int i=1;i<=n;i++){
for(int j=i;j>=1;j--){
if(i==j) a[i]=1;
else a[j]=a[j]+a[j-1];
}
for(int j=1;j<=i;j++){
cout<<a[j]<<" ";
}
cout<<endl;
}
return 0;
}
孤独的偶数
题目描述
在一个 n 行 m 列的矩阵王国中,生活着一些整数,其中一些是偶数,一些不是偶数。如果一个偶数的
上下左右、左上、右上、左下、右下相邻的数中都没有素数,我们就认为这是一个孤独的偶数。
输入
第 1 行有 2 个整数 n 和 m ,代表矩阵的大(3≤n,m≤50)。
接下来 n 行,每行有 m 个整数(这些整数是 1∼1000 之间的整数,含 1
和 1000 )
输出
输出 1 个整数,代表矩阵中孤独偶数的个数。
输入样例
3 5
3 9 10 9 5
1 10 3 4 13
8 3 9 6 3
输出样例
1
#include<iostream>
using namespace std;
int x[8] = {0, 1, 0, -1, -1, 1, -1, 1};
int y[8] = {1, 0, -1, 0, 1, 1, -1, -1};
bool ifzhishu(int);
int main() {
int a[50][50] = {0};
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
bool f = true;
for (int k = 0; k < 8; k++) {
int tx = i + x[k];
int ty = j + y[k];
bool p = ifzhishu(a[tx][ty]);
if (p == true) {
f = false;
break;
}
}
if (f == true && a[i][j] % 2 == 0) cnt++;
}
}
cout<<cnt;
return 0;
}
bool ifzhishu(int n) {
if (n == 0) return false;
if (n == 1) return false;
for (int i = 2; i < n; i++) {
if (n % i == 0) return false;
}
return true;
}
是否相邻
题目描述
同学们在操场上排成了一个 n 行 m 列的队形,假设这个队形中所有人年龄都不同,那么给定 2 个年龄后,
请你编程判断,这 2 个年龄对应的同学是否相邻?
相邻的定义是:如果两个同学在上下左右的位置是挨在一起的,那么就算是相邻的。
比如:如下是一个 3 行 4 列的队形,这个队形中每个数字代表了每个同学的年龄。
那么这个队形中年龄 6 和年龄 10 两个值就是相邻的
输入
第 1 行有 2 个整数 n 和 m ,分别代表队形的行和列的值( 2≤n,m≤200)
接下来 n 行,每行有 m 个整数,代表每个同学的年龄(每个同学的年龄的值在 1∼100 之间)
最后一行输入 2 个整数,代表 2 个不同年龄的值。
输出
如果两个年龄的值是相邻的,请输出字符 `Y` ,否则请输出字符 `N`
#include<iostream>
using namespace std;
int x[4]={0, 1, 0, -1};
int y[4]={1, 0, -1, 0};
int main()
{
int a[50][50]={0};
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;i++){
cin>>a[i][j];
}
}
int c,b;
cin>>c>>b;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==c){
for(int k=0;k<4;k++){
int x2=i+x[k];
int y2=j+y[k];
if(a[x2][y2]==b){
cout<<"Y";
return 0;
}
}
}
}
}
cout<<"N";
return 0;
}
矩阵加法
描述
输入两个n行m列的矩阵A和B,输出它们的和A+B。
输入
第一行包含两个整数n和m,表示矩阵的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示矩阵A的元素。
接下来n行,每行m个整数,表示矩阵B的元素。
相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。
输出
n行,每行m个整数,表示矩阵加法的结果。相邻两个整数之间用单个空格隔开。
#include<iostream>
using namespace std;
int main()
{
int a[100][100]={0};
int b[100][100]={0};
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>b[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<a[i][j]+b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}