#include <iostream>
using namespace std;
#define maxSize 101
/*
//把非零元素移动到数组前端 天勤P122(二)1
void Remove(int a[],int n)
{
int i=0,j=n-1;
while(i<j)
{
while(i<j&&a[i]!=0)
{
i++;
}
while(i<j&&a[j]==0)
{
j--;
}
if(a[i]==0&&a[j]!=0)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
int main()
{
int a[101],n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Remove(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
}
//9
//0 2 3 0 0 2 3 4 0
//
*/
/*
//递归找最大值 天勤P122(二)2.1
int FindMax(int a[],int n)
{
if(n==1)
return a[1];
return max(a[n],FindMax(a,n-1));
}
int main()
{
int a[101],n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int d=FindMax(a,n);
cout<<d<<endl;
}
*/
/*
//递归求n个数之和 天勤P122(二)2.2
int sum(int a[],int n)
{
if(n==0)
{
return a[0];
}
return a[n]+sum(a,n-1);
}
int main()
{
int n,a[101];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int d=sum(a,n);
cout<<d<<endl;
}
9
0 2 3 0 0 2 3 4 0
//14
*/
/*
//递归求n个数的平均值 天勤P122(二)2.2
int sum(int a[],int n)
{
if(n==0)
{
return a[0];
}
return a[n]+sum(a,n-1);
}
int Avg(int a[],int n)
{
int s=sum(a,n);
return s/n;
}
int main()
{
int n,a[101];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int d=Avg(a,n);
cout<<d<<endl;
}
*/
/*
//不写两个函数计算平均值
float Avg(int a[],int i,int j)
{
if(i==j)
{
return a[i];
}
return (a[i]+(j-i)*Avg(a,i+1,j))/(j-i+1);
}
int main()
{
int n,a[101];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int d=Avg(a,0,n-1);
cout<<d<<endl;
}
*/
/*
//把所有的奇数移到偶数之前 天勤P123(二)3
void Move(int a[],int n)
{
int i=0,j=n-1;
while(i<j)
{
while(i<j&&a[i]%2!=0)
{
i++;
}
while(i<j&&a[j]%2==0)
{
j--;
}
if(a[i]%2==0&&a[j]%2==1)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
int main()
{
int n,a[101];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Move(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
7
2 4 5 6 1 2 5
*/
/*
//把小于a[n-1]的数放a[n-1]左边,把大于a[n-1]的数放a[n-1]右边 天勤P123(二)4
void Patition(int a[],int n)
{
int t=a[n-1];
int i=0,j=n-1;
while(i<j)
{
// cout<<1<<endl;
while(i<j&&a[i]<t)
{
i++;
}
if(i<j) //一定不能少!!!
{
a[j]=a[i];
j--; //一定不能少!!!
}
while(i<j&&a[j]>t)
{
j--;
}
if(i<j)
{
a[i]=a[j];
i++;
}
}
a[i]=t;
}
int main()
{
int n,a[101];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Patition(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
*/
/*
//找出既是行的最小值又是列的最小值的点 天勤P123(二)5
void FindMin(int a[][maxSize],int m,int n)
{
int min1[m],min2[n];
for(int i=0;i<m;i++)
{
int min=a[i][0];
for(int j=1;j<n;j++)
{
if(a[i][j]<min)
{
min=a[i][j];
}
min1[i]=min;
}
}
for(int j=0;j<n;j++)
{
int min=a[0][j];
for(int i=1;i<m;i++)
{
if(a[i][j]<min)
{
min=a[i][j];
}
}
min2[j]=min;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==min1[i]&&a[i][j]==min2[j])
{
cout<<i<<" "<<j<<" "<<a[i][j]<<endl;
}
}
}
}
int main()
{
int a[101][101];
int m,n;
cin>>m>>n;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
FindMin(a,m,n);
}
//3
//4
//1 1 0 1
//2 3 2 2
//2 3 2 3
*/
/*
//稀疏矩阵基本操作 天勤P123(二)6
typedef struct Trimax
{
int val,x,y;
}Trimax;
void Create(int a[][maxSize],int m,int n,Trimax t[])
{
t[0].x=m;
t[0].y=n;
int k=1;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]!=0)
{
t[k].val=a[i][j];
t[k].x=i;
t[k].y=j;
k++;
}
}
}
t[0].val=k-1;
}
void Print(Trimax t[])
{
cout<<t[0].val<<" "<<t[0].x<<" "<<t[0].y<<endl;
for(int i=1;i<=t[0].val;i++)
{
cout<<t[i].val<<" "<<t[i].x<<" "<<t[i].y<<endl;
}
}
int main()
{
int a[101][101];
int m,n;
cin>>m>>n;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
Trimax t[maxSize];
Create(a,m,n,t);
Print(t);
}
//3
//4
//1 1 0 1
//2 3 2 2
//2 3 2 3
*/