帮忙看看C程序 那错了

来源:百度知道 编辑:UC知道 时间:2024/05/10 19:49:52
防御导弹
Problem
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:
虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

Input
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

Output
两个整数M和N。表示:这套系统最多能拦截 M 枚导弹,如果要拦截所有导弹最少要配备 N 套这种导弹系统。

Sample Input
300 250 275 252 200 138 245

Sample Output
5 2

#include <stdio.h>
int m=1, n=1;
void hanshu(int shuzi,int b[])
{
int i,maxz,c=1,j=0,sheng[20],maxz1; //sheng[]表示每一次递归剩下的元素
int static cishu=0; //maxz1表示最大的元素
for(i=0;i<shuzi-1;i++)
{
if(c==1) maxz=b[i];
if(c==2) maxz=maxz1;
if(maxz>b[i+1])
{
m++;
c=1;
}
else
{
maxz1=b[i];
c=2;
sheng[j]=b[i+1]; //记下剩余的元素
j++;
//shu=shuzi-1;
//shuzi=shu;
//continue;
}<

修改后的程序
#include <stdio.h>

int m=1, n=1;
void hanshu(int shuzi,int b[])
{
int i,maxz,c=1,j=0,sheng[20],maxz1; //sheng[]表示每一次递归剩下的元素
int static cishu=0; //maxz1表示最大的元素
for(i=0;i<shuzi-1;i++)
{
if(c==1) maxz=b[i];
if(c==2) maxz=maxz1;
if(maxz>b[i+1])
{
m++;
c=1;
}
else
{
maxz1=b[i];
c=2;
sheng[j]=b[i+1]; //记下剩余的元素
j++;
//shu=shuzi-1;
//shuzi=shu;
//continue;
}
}
shuzi=shuzi-j; //控制剩余元素组成的数组的大小
if(cishu==0) printf("m:%d\n",m);
cishu++; //使第二次以上的递归都不输出m的值
if(shuzi>0)
{
n++;
hanshu(shuzi,sheng);
j=0;
}
else
printf("n:%d",n);
}
void main()
{
int a[20];
int i,ge;
printf("个数");
scanf("%d",&ge);
getchar();