信奥之路-C++第9课作业
1. 打印乘法表
【问题描述】
用for循环实现输出1至9的乘法表
【样例输出】
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
#include<iostream>
using namespace std;
int main(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
cout<<j<<"*";
cout<<i<<"="<<j*i<<" ";
}
cout<<endl;
}
return 0;
}
2. 矩阵交换
【问题描述】
给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
输入:输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第6行包含两个整数m、n(1 <= m,n< = 5),以一个空格分开。
输出:输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
【样例输入】
1 2 2 1 2
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
3 0 8 2 4
1 5
【样例输入】
3 0 8 2 4
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
1 2 2 1 2
#include<iostream>
using namespace std;
int main(){
//定义要交换的行数
int r1,r2;
//定义一个五行五列的二维数组
int a[5][5]={};
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>a[i][j];
}
}
//输入你要交换的行和列
cin>>r1>>r2;
for(int i=0;i<5;i++){
swap(a[r1-1][i],a[r2-1][i]);
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
1. 打印杨辉三角
【问题描述】
打印杨辉三角形的前10行,杨辉三角形如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
【样例输出】
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
#include<iostream>
using namespace std;
int main()
{
//定义一个十行十列的数组
int a[10][10];
//先遍历行
for(int i=0;i<10;i++){
//先把空格打出来
for(int h=0;h<10-i;h++){
cout<<" ";
}
for(int j=0;j<=i;j++){
if(j==0||j==i)
{
a[i][j]=1;
}
else {
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
2. 扫雷游戏地雷数计算
【问题描述】
扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。
输入:第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。
输出:n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。
【样例输入】
3 3
*??
???
?*?
【样例输出】
*10
221
1*1
#include <iostream>
using namespace std;
int main(){
int n,m,cnt=0;
char a[102][102];
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++){
if(a[i][j]!='*'){
if(a[i-1][j-1]=='*') cnt++;
if(a[i-1][j]=='*') cnt++;
if(a[i-1][j+1]=='*') cnt++;
if(a[i][j-1]=='*') cnt++;
if(a[i][j+1]=='*') cnt++;
if(a[i+1][j-1]=='*') cnt++;
if(a[i+1][j]=='*') cnt++;
if(a[i+1][j+1]=='*') cnt++;
cout<<cnt;
cnt=0;
}
else{
cout<<"*";
}
}
cout<<" "<<endl;
}
return 0;
}
3. 二维数组右上左下遍历
【问题描述】
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。
输入:输入的第一行上有两个整数,依次为row和col。余下有row行,每行包含col个整数,构成一个二维整数数组。(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出:按遍历顺序输出每个整数。每个整数占一行。
【样例输入】
3 4
1 2 4 7
3 5 8 10
6 9 11 12
【样例输出】
1 2 3 4 5 6 7 8 9 10 11 12
#include <iostream>
using namespace std;
int main(){
int r,c,max;
cin>>r>>c;
max=r+c-1;
int a[101][101];
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
cin>>a[i][j];
}
}
for(int k=max;k;k--){ //3 4
for(int j=max-k,i=0;i<r;j--,i++){
if(j>=0&&j<c)
cout<<a[i][j]<<" ";
}
}
return 0;
}
作者: 王春天 出处: http://www.cnblogs.com/spring_wang/ Email: spring_best@yeah.net QQ交流:903639067
QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。


浙公网安备 33010602011771号