简单理解一下函数
函数就好比一个盒子,里面放着指定的代码(例如之前用到的strlen,就是一个输出数组长度的代码),使用起来可以让代码更简洁,而且可以重复使用,但是也分为自定义函数和系统函数,自定义函数就是拿一个新的盒子,然后自己往里面放代码(注意:函数的定义要写在主函数外),系统函数就是系统帮你提前编写好的,可以直接调用,不需要自己定义。
现在主要是用系统函数,自定义函数后面再用;
具体系统函数函数有哪些可以参考前面的文章,再加个新的:swp(int,int),是用于交换两个数值。
OK 进入正文
输出数组的最大值
题目描述: 输入一个n*n的矩阵 输出每一行的最大值,每一列的最大值 输入 一个整数 n,代表矩阵规模 n行整数,矩阵的数据 输出2行第1行,空格隔开,矩阵每一行的最大值 第2行,空格隔开,矩阵每一列的最大值
样例输入
3
1 2 3
9 8 7
2 4 5
样例输出
3 9 5
9 8 7
#include<iostream>
using namespace std;
int main()
{
int a[110][110];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
int ma=-1;
for(int j=0;j<n;j++)
{
ma=max(ma,a[i][j]);
}
cout<<ma<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
{
int ma=-1;
for(int j=0;j<n;j++)
{
ma=max(ma,a[j][i]);
}
cout<<ma<<" ";
}
return 0;
}
交换数值
题目描述: 输入一个n*n的矩阵 交换每一列的最大值,最小值 输入 一个整数 n,代表矩阵规模 n行整数,矩阵的数据 输出 交换后的矩阵
样例输入
3
1 2 3
9 8 7
2 4 5
样例输出
9 8 7
1 2 3
2 4 5
#include<iostream>
using namespace std;
int main()
{
int a[110][110];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
int ma=-1;
int mai=0;
int maj=0;
int mi=9999;
int mii=0;
int mij=0;
for(int j=0;j<n;j++)
{
if(ma<a[j][i])
{
ma=a[j][i];
mai=j;
maj=i;
}
if(mi>a[j][i])
{
mi=a[j][i];
mii=j;
mij=i;
}
}
swap(a[mai][maj],a[mii][mij]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
冒泡排序
题目描述: 对于给定的正整数序列,按照每个数的? 各位数的和? 从大到小排序,各位数的和? ?相同的按照本身大小排序,大的在前, 小的在后。 输入格式 第一行 1 个整数 n, 表示序列的大小。(0 < n ≤ 1000) 第二行 n 个正整数,表示序列的每个数,每个数不大于 100000000。 输出格式 输出按照题目要求排序后的序列。
样例输入
6
17 26 9 13 88 10
样例输出
88 9 26 17 13 10
#include<iostream>
using namespace std;
int main()
{
int a[110];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
int tmp=a[j];
int sum=0;
int tmp1=a[j+1];
int sum1=0;
while(tmp!=0)
{
sum=sum+tmp%10;
tmp=tmp/10;
}
while(tmp1!=0)
{
sum1=sum1+tmp1%10;
tmp1=tmp1/10;
}
if(sum<sum1)
{
swap(a[j],a[j+1]);
}
if(sum==sum1&&a[j]<a[j+1])
{
swap(a[j],a[j+1]);
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
数组k位之后逆序重放
题目描述: 将一个数组中的值k到最后一位逆序重新存放。 例如,原来的顺序为8,6,5,4,1。要求将其第三位之后的值逆序,变为8 6 1 4 5。 输入 输入为3行:第一行数组中元素的个数n(1<n<100)第二行是n个整数,每辆整数之间用空格分隔。第三行是整数n,表示从哪里开始逆序? 输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
9
1 2 3 4 5 6 7 8 9
6
样例输出
1 2 3 4 5 9 8 7 6
#include<iostream>
using namespace std;
int main()
{
int a[110];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int s;
cin>>s;
int e=(n-s)/2+s-1;
int j=n-1;
for(int i=s-1;i<e+1;i++)
{
swap(a[i],a[j]);
j--;
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
矩阵交换列 描述 给定一个a*a的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列), 将第n列和第m列交换,输出交换后的结果。 输入 第1行一个整数a,代表矩阵规模 后面a行,每行a个整数,代表矩阵的内容 之后两个整数m、n,以一个空格分开。(1 <= m,n <= 5) 输出 输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
样例输入
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
样例输出
2 2 2 1 1
3 6 7 8 5
3 3 0 5 9
6 2 1 4 7
4 0 8 2 3
#include<iostream>
using namespace std;
int main()
{
int a[110][110];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cin>>a[i][j];
}
}
int n,m;
cin>>n>>m;
n--;
m--;
//因为实际数字和下角标差1,所以要执行--操作
for(int i=0;i<5;i++)
{
swap(a[i][n],a[i][m]);
}
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}