求解思路
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-02 06:28
2019-11-02 08:17

[此贴子已经被作者于2019-11-3 05:44编辑过]
2019-11-03 05:21
2019-11-03 05:23
程序代码:#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;
}
2019-11-04 09:20

2019-11-04 11:41
程序代码:#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]);
}
}
}
2019-11-04 14:36
2019-11-04 16:43