【问题描述】
小女孩塔雅在一栋多层建筑中攀爬楼梯,每次爬过一个楼梯,她喜欢从1到顶数楼梯的台阶级数,并大声地说出每个数字。如果她爬了两个楼梯,第一个有3级,第二个有4级,她将读出数字1、2、3、1、2、3、4。
给出塔雅读出的所有数字,判断她爬了多少楼梯,且输出每个楼梯有多少台阶级数?
【输入形式】
输出的第一行为一个整数n,表示塔雅读出了多少个数字。
第二行包含n个整数a1、a2、...、an,表示塔雅攀爬楼梯时读出的数字,按顺序从第1个到最后一个,当攀爬一个有x级的楼梯时,她将依次读出1、2、...、x。
【输出形式】
输出的第一行一个t,表示塔雅攀爬的楼梯个数,第二行输出t个数,表示每个楼梯的台阶数。
【样例输入】
7
1 2 3 1 2 3 4
【样例输出】
2
3 4
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n],num=0; //定义数组a储存数据,楼梯个数num
for(int i=0;i<n;i++)
{
cin>>a[i]; //输入数据
if((a[i]-a[i-1])<=0) num++;
//当后一个数据小于前一个数据,表明重新台阶数计数,已换楼梯,num++
}
num++; //最后一个数据没办法减,但表明走到顶楼,计数加一
int b[num],l=1; //定义b数组储存每个楼梯台阶数,标尺l记录循环到达a数组位置
for(int x=0;x<num-1;x++) //外循环,给数组b赋值
{
for(int y=1;y<n;y++) //内循环,计数断点位置
{
if(y==1) y=l; //首次循环时,将标尺值赋给y,从此开始循环
if((a[y]-a[y-1])<=0) //达到断点位置
{
b[x]=a[y-1]; //对b数组赋值断点前一位的数据值
l=y+1; //令l=y+1,下一次循环从断点位置开始
break; //跳出此次循环
}
}
}
b[num-1]=a[n-1]; //最后一个楼梯的台阶数=输入的最后一个数据
cout<<num<<endl; //输出
for(int s=0;s<num;s++)
{
cout<<b[s]<<' ';
}
return 0;
}