求解思路
1048: 【基础】求序列中所有递增或递减子序列的个数并输出子序列。题目描述
输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数。
输入
输入只有一行,包括10个整数。之间用一个空格分开。
输出
输出的第一行,包括1个整数n.后面跟着n行.
样例输入
1 10 8 5 9 3 2 6 7 4
样例输出
6
1 10
10 8 5
5 9
9 3 2
2 6 7
7 4
程序代码:#include <stdio.h>
int main( void )
{
// 输入 10个整数
int a[10];
for( size_t i=0; i!=sizeof(a)/sizeof(*a); ++i )
scanf( "%d", &a[i] );
// 求 子序列的个数
{
unsigned count = 0;
int s = 0; // +表示增,-表示减
for( size_t i=1; i!=sizeof(a)/sizeof(*a); ++i )
{
if( a[i]>a[i-1] && s<=0 )
{
s = +1;
++count;
}
else if( a[i]<a[i-1] && s>=0 )
{
s = -1;
++count;
}
}
printf( "%u", count );
}
// 输出 所有子序列
{
int s = 0; // +表示增,-表示减
for( size_t i=1; i!=sizeof(a)/sizeof(*a); ++i )
{
if( a[i]>a[i-1] && s<=0 )
{
s = +1;
printf( "\n%d", a[i-1] );
}
else if( a[i]<a[i-1] && s>=0 )
{
s = -1;
printf( "\n%d", a[i-1] );
}
printf( " %d", a[i] );
}
printf( "\n" );
}
return 0;
}