T7 靶心数
问题描述
James 同学发现了在二维数组中有这样一类数,这个数正好比自己上下左右四个方向的数都大(由于需要比四个方向的数都大,因此这个数不可能在第一行、最后一行、第一列、最后一列), James 把它们称为靶心数。
请你编程求出一个二维数组的靶心数有哪些,输出他们。
输入
第一行是两个整数 n 和 m(n 和 m 都是 4∼100 之间的整数),代表接下来的二维数组有 n 行 m列。
接下来 n 行,每行有 m 个整数。
输出
请按照输入的顺序输出满足条件的靶心数,每行 1 个。
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[200][200];
int i,j,n,m,t;
cin >> n >> m;
for(i = 0;i < n;i++){
for(j = 0;j < m;j++){
cin >> a[i][j];
}
}
for(i = 1;i < n - 1;i++){
for(j = 1;j < m - 1;j++){
t = a[i][j];
if(t > a[i - 1][j] && t > a[i + 1][j] && t > a[i][j - 1] && t > a[i][j + 1]){
cout << t << endl;
}
}
}
}
T8 奇偶统计
问题描述
在一个 n 行 m 列的二维数组中,有若干奇数和偶数,请编程统计出这个二维数组中,奇数和偶数分别有多少个?
输入
第一行是两个整数 n 和 m ( n 和 m 都是 4∼100 之间的整数),代表接下来的二维数组有 n 行 m 列。
接下来 n 行,每行有 m 个整数。(这些整数都是 0∼9999 之间的整数)
输出
两个整数用空格隔开,分别代表二维数组中奇数、偶数的个数。
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,x,n,ou=0,ji=0;
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>x;
if(x%2==0) ou++;
else ji++;
}
}
cout<<ji<<" "<<ou;
return 0;
}
T9 找回文数?
问题描述
James同学发现了在二维数组中有一些回文数,请编程找出这些回文数,并按照输入的顺序输出。
(回文数指的是这个数正过来读和反过来读是同一个数的数,比如 1、8、99、252、12211、8、99、252、1221 等)。
输入
第一行是两个整数 n 和 m (n 和 m 都是 4∼100 之间的整数),代表接下来的二维数组有 n 行 m 列。
接下来 n 行,每行有 m 个整数,这些整数都是 1∼9999 之间的整数。
输出
按照输入的顺序输出满足条件的回文数,每行 1 个。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
string x,cnt;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>x;
cnt=x;
reverse(cnt.begin(),cnt.begin()+cnt.size());
if(x==cnt) cout<<x<<endl;
}
}
return 0;
}
T10 石头剪刀布?
问题描述
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。一天,小 a 和小 b 正好在玩石头剪刀布,假设 1 代表石头, 2 代表剪刀, 3 代表布。小 a 和小 b 一共玩了 n 轮,请问最后的比赛结果是小 a 赢了还是小 b 赢了,还是平局?
注意:最终输赢按照小 a和小 b 赢的总次数计算。例如:共比赛 7 局,小 a 赢了 4 局,小 b 赢了 3 局,那么输出“ a win
”。
输入
第一行,是一个整数 n (n≤100 )
接下来 n 行,每行有 2 个数,分别代表每轮比赛中小 a 和小 b 的出拳。
输出
如果小 a 赢了,输出字符串“ a win
”,如果小 b 赢了,输出字符串“ b win
”,如果平局则输出字符串“ tie
”。(请注意:输出的字符串全部是小写)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,b,cnta=0,cntb=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b;
if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==1)) cnta++;
else if(a!=b) cntb++;
}
if(cnta==cntb) cout<<"tie";
else if(cnta>cntb) cout<<"a win";
else cout<<"b win";
return 0;
}
T11 扫雷(mine)
(格式有些问题,那就配个注释吧!)
问题描述
扫雷游戏是一款十分经典的单机小游戏。在 nn 行 mm 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出 nn 行 mm 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
输入
第一行是用一个空格隔开的两个整数 nn 和 mm,分别表示雷区的行数和列数。
接下来 nn 行,每行 mm 个字符,描述了雷区中的地雷分布情况。字符 \texttt{*}* 表示相应格子是地雷格,字符 \texttt{?}? 表示相应格子是非地雷格。相邻字符之间无分隔符。
输出
输出文件包含 nn 行,每行 mm 个字符,描述整个雷区。用 \texttt{*}* 表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
#include<bits/stdc++.h>
using namespace std;
bool a[105][105];//一张地图,有雷为一,无雷为零
int main()
{
memset(a,0,sizeof(a));//地图最开始清空
int n,m;
char tmp;
cin>>n>>m;
for(int i=1;i<=n;i++)//读入地图
{
for(int j=1;j<=m;j++)
{
cin>>tmp;//读入每一个点
if(tmp=='*') a[i][j]=1;//如果是地雷就将这个点设为一
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==1) printf("*"); //如果是地雷不用输出数字
else
{
printf("%d",a[i+1][j+1]+a[i+1][j-1]+a[i+1][j]+a[i][j+1]+a[i][j-1]+a[i-1][j+1]+a[i-1][j]+a[i-1][j-1]);
//将旁边的雷加起来输出
}
}
printf("\n");
}
return 0;//愉快的结束了主程序
}
T12 每个小组的最大年龄
问题描述
同学们在操场上排成了一个 n 行 m 列的队形,每行的同学属于一个小组,请问每个小组同学的最高年龄是几岁,请输出每个小组的最高年龄。 比如:如下是一个 3 行 4 列的队形,这个队形中每个数字代表了每个同学的年龄。
8 10 12 9
15 12 10 6
17 20 18 18
第一行的 4 个年龄中最高年龄是 12 岁。 第二行的 4 个年龄中最高年龄是 15 岁。 第三行的 4 个年龄中最高年龄是 20 岁。
输入
第 1 行有 2 个整数 n 和 m ,分别代表队形的行和列的值( 2≤n,m≤100 )
接下来 nn 行,每行有 mm 个整数,代表每个同学的年龄(每个同学的年龄的值在 1∼100之间)
输出
输出 n 行,每行有一个整数,代表每个小组年龄的最大值。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,l=0;
int a[1100][1100];
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]>=l){
l=a[i][j];
}
}
cout<<l<<endl;
l=0;
}
return 0;
}