求解思路
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
[此贴子已经被作者于2019-11-3 05:44编辑过]
#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; }
#include <stdio.h> int main() { int i, t = -1, A[10]; for(i=0; i<10; ++i) scanf("%d", &A[i]); for(i=1; i<10; ++i) { if(t == (A[i]>A[i-1])) printf(" %d", A[i]); else //新序列 { t = (A[i]>A[i-1]); printf("\n%d %d", A[i-1], A[i]); } } }