编程题#1:计算矩阵边缘元素之和
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
输入
第一行为整数k,表示有k组数据。
每组数据有多行组成,表示一个矩阵:
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以空格分隔。
接下来输入的m行数据中,每行包含n个整数,整数之间以空格作为间隔。
输出
输出对应矩阵的边缘元素和,一个一行。
#include <iostream>
using namespace std;
int main()
{
int k,m,n;
k=m=n=0;
int i,j;
i=j=0;
int p=0;
int x[10][100][100];
cin>>k;
for(i=0;i<k;i++)
{
cin>>m>>n;
for(j=0;j<m;j++)
for(p=0;p<n;p++)
cin>>x[i][j][p];
}
for(i=0;i<k;i++)
{
int sum=0;
for( int p=0,j=0;p<n;p++)
sum+=x[i][j][p];
for(j=1;j<m-1;j++)
{
sum+=x[i][j][0]+x[i][j][n-1];
}
for(p=0,j=m-1;p<n;p++)
sum+=x[i][j][p];
cout<<sum<<endl;
}
return 0;
}
编程题#2: 二维数组右上左下遍历
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。
输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)
输出按遍历顺序输出每个整数。每个整数占一行。
#include <iostream>
using namespace std;
int main()
{
int row = 0, rol = 0;
cin >> row >> col;
int array[100][100] = {0};
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> array[i][j];
}
}
int x = 0, y = 0;
for (int i = 0; i < row+col-1; i++)
{
x = i > col-1? i-col+1 : 0;
y = i-x;
while (x <= row-1 && y >= 0)
{
cout << array[x][y] << endl;
x++;
y--;
}
}
return 0;
}
编程题#3:文字排版
给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:
每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。
输入第一行是一个整数n,表示英文短文中单词的数目. 其后是n个以空格分隔的英文单词(单词包括其前后紧邻的标点符号,且每个单词长度都不大于40个字母)。
输出排版后的多行文本,每行文本字符数最多80个字符,单词之间以一个空格分隔,每行文本首尾都没有空格。
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
int words = 0, sum = 0;
cin >> words;
char str[41]={0};
for (int i = 0; i < words; i++)
{
cin >> str;
if (sum + 1 + strlen(str) > 80)
{
cout << endl;
sum = 0;
}
else if(i>0)
{
cout << " ";
sum++;
}
cout << str;
sum += strlen(str);
}
return 0;
}