合唱队形
合唱队形时限:1000MS
内存限制:65536KByte
总提交:4 测试通过:2
题目描述
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...Ti+1>…>TK(1<=i<=K)。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入
输入包含多组测试数据。每组数据的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。输入以EOF结束。
输出
对于每组数据,输出一行,这一行只包含一个整数,就是最少需要几位同学出列。
样例输入
8 186 186 150 200 160 130 197 220
样例输出
4
我把Ti项可以作为任意项,出列人数分别存入数组b,然后输出最小值,但是得不到结果呢。。
#include<stdio.h>
int main()
{
int n,k=0,a[100],b[100]={0},c[100],i,min;
while(scanf("%d",&n)!=EOF)
{
while(k<n)
{
scanf("%d",&a[k]);
c[k]=a[k];
k++;
}
k=0;
for(i=0;i<n;i++)//可变的Ti项
{k=0;
a[i]=a[i]+1;
while(k<i)//升序
{
if(a[k]>=a[k+1])
{b[i]++;a[k+1]=a[k];}
k++;
}
while(k<n-1)//降序
{
if(a[k]<=a[k+1])
{b[i]++;a[k]=a[k+1];}
k++;
}
k=0;
while(k<n)//把数组a还原
{
a[k]=c[k];
k++;
}
}
min=b[0];
for(i=0;i<n-1;i++)//比较最小出列人数
{
if(b[i]>b[i+1])
min=b[i+1];b[i]=0;
}
b[i+1]=0;
printf("%d\n",min);
}
return 0;
}