1
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void move(int a[],int n)
{
int i=0,j=n-1;
while(i<j)
{
while(!a[i]&&i<j)i++;
while(a[j]&&i<j)j--;
if(i<j)swap(a[i],a[j]);
}
}
int main() {
int a[]={1,0,0,0,2,4,3};
int n=sizeof(a)/sizeof(int);
move(a,n);
for(int i=0;i<n;i++)cout<<a[i]<<" ";
cout<<endl;
}
2
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int find_max(int a[],int n)
{
if(n==1)return a[0];
int max=find_max(a,n-1);
return max>a[n-1]?max:a[n-1];
}
int sum(int a[],int n)
{
if(n==1)return a[0];
int res=a[n-1]+sum(a,n-1);
return res;
}
double avg(int a[], int n) {
if (n == 1)
return a[0];
double prevAvg = avg(a, n - 1); // 递归调用:计算前 n-1 个元素的平均值
return (prevAvg * (n - 1) + a[n - 1]) / n; // 返回前 n 个元素的平均值
}
int main() {
int a[]={1,0,0,0,2,5,3};
int n=sizeof(a)/sizeof(int);
cout<<find_max(a,n)<<" "<<sum(a,n)<<" "<<avg(a,n)<<endl;
}
3
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void move(int a[],int n)
{
int i=0,j=n-1;
while(i<j)
{
while(a[i]%2==1&&i<j)i++;
while(a[j]%2==0&&i<j)j--;
if(i<j)swap(a[i],a[j]);
}
}
int main() {
int a[]={1,3,6,5,2,4,3};
int n=sizeof(a)/sizeof(int);
move(a,n);
for(int i=0;i<n;i++)cout<<a[i]<<" ";
cout<<endl;
}
4
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void partition(int a[],int n)
{
int left=-1;//小于等于区域的边界
int i=0;
int nums=a[n-1];//划分元素
while(i<n)
{
if(a[i]<=nums)
{
swap(a[++left],a[i++]);
}
else
{
i++;
}
}
}
int main()
{
int a[]={1,2,4,5,6,7,3};
int n=sizeof(a)/sizeof(int);
partition(a,n);
for (int i = 0; i < n; i ++ )cout<<a[i]<<" ";
}
5马鞍点问题
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int m,n;
int a[100][100];
void print_min()
{
int count=0;//记录最小值个数
for(int i=0;i<m;i++)
{
int min = a[i][0];
int minj = 0;
for(int j=0;j<n;j++)
{
if(a[i][j]<min)
{
min=a[i][j];//找到每一行的最小值
minj=j;//最小值的列坐标
}
}
bool flag=true;
//判断是否是那一列的最小值
for(int k=0;k<m;k++)
{
if(a[k][minj]<min)
{
flag=false;
break;
}
}
if(flag)
{
count++;
cout<<min<<" ["<<i<<"]"<<"[" <<minj<<"]"<<endl;
}
}
cout << count<<" "<<endl;
}
void print_max()
{
int count=0;
for(int i=0;i<m;i++)
{
int max=a[i][0];
int maxj=0;
for(int j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
}
bool flag=true;
for(int k=0;k<m;k++)
{
if(a[k][maxj]>max)
{
flag=false;
break;
}
}
if(flag)
{
count++;
cout<<max<<" ["<<i<<"]"<<"[" <<maxj<<"]"<<endl;
}
}
cout<<count<<" "<<endl;
}
int main()
{
cin>>m>>n;
for(int i=0;i<m;i++)
for (int j= 0; j < n; j ++ )cin>>a[i][j];
print_min();
print_max();
}
6
#include <iostream>
using namespace std;
int m, n;
int a[10][10]; // 稀疏矩阵
int b[100][3]; // 三元组
int c[100][3]; // 转置三元组
int create()
{
int k = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (a[i][j] != 0) // 只存储非零元素
{
b[k][0] = a[i][j];
b[k][1] = i;
b[k][2] = j;
k++;
}
}
}
// 打印三元组
for (int i = 0; i < k; i++)
{
for (int j = 0; j < 3; j++)
{
cout << b[i][j] << " ";
}
cout << endl;
}
return k;
}
bool judge(int x)
{
for (int i = 0; i < m * n; i++)
{
if (b[i][0] == x)
{
return true;
}
}
return false;
}
//矩阵转置
void reverse(int b[][3],int c[][3],int count)
{
for(int i=0;i<count;i++)
{
for(int j=0;j<3;j++)
{
c[i][0]=b[i][0];
c[i][1]=b[i][2];
c[i][2]=b[i][1];
}
}
cout << "反转后的三元组:" << endl;
for (int i = 0; i <count ; i++)
{
cout << c[i][0] << " " << c[i][1] << " " << c[i][2] << endl;
}
}
int main()
{
cin >> m >> n;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
int count=create();
int x;
cin >> x;
if (judge(x))
cout << "存在" << endl;
else
cout << "不存在" << endl;
reverse(b,c,count);
return 0;
}
8