求解思路
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; }