| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3708 人关注过本帖, 1 人收藏
标题:防御导弹问题:最多能拦截多少导弹
只看楼主 加入收藏
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:0 
运行不了
 a[a_len]=p;
什么意思,指针没赋值就引用。
搞这么复杂干吗,用个静态数组就好了
2009-10-05 00:02
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
动态申请空间,你用TC运行吧。

努力—前进—变老—退休—入土
2009-10-05 00:10
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
我之前有动态申请考虑到可能输入很多的数(敌国导弹有时一下可以发射很多),指针的指针使用有问题,改用数组,你再试试
程序代码:
#include<stdio.h> 
int main(void) 
{ 
    int i,j,k,k1,x,n,m,max_len=0,max,a_len=0; 
    int y,a[100]={0},p[100]; 
 
    while(1) 
      { 
       scanf("%d",&y); 
       if(y==-1)break; 
       a[a_len]=y; 
       a_len++; 
      } 
 
 
 
    for(k=0;k<a_len-2;k++) 
      { 
       x=a[k]; 
       n=1; 
       for(i=k+1;i<a_len-1;i++) 
    { 
     if(x>a[i]) 
       { 
        m=a[i]; 
        n=2; 
        for(j=i+1;j<a_len;j++) 
          { 
          if(m>a[j]) 
        { 
         n++; 
         m=a[j]; 
        } 
          } 
       } 
     if(max_len<n) 
        { 
         max_len=n; 
         m=p[0]=max=a[k]; 
         for(j=i,k1=1;j<a_len;j++) 
           { 
        if(m>a[j]) 
          { 
           p[k1]=a[j]; 
           m=a[j]; 
           k1++; 
          } 
           } 
         if(k<a_len) 
           p[k1]=-1; 
        } 
     if((a_len-i-1)<n)break; 
    } 
    if(a_len-2-k<max_len)break; 
       } 
 
 
    printf("%d\n",max_len); 
    for(i=0;i<a_len;i++) 
      { 
       if(p[i]==-1)break; 
       printf("%d ",p[i]); 
      } 
    printf("\n\n"); 
 
    getch(); 
    return 0; 
} 



[ 本帖最后由 UserYuH 于 2009-10-5 00:48 编辑 ]

努力—前进—变老—退休—入土
2009-10-05 00:43
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
回复 13楼 UserYuH
导弹还是很贵的

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-05 01:16
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
贵是贵点,但中国要是向日本发射导弹,多少都能造。

努力—前进—变老—退休—入土
2009-10-05 02:30
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:0 
什么东西只要是made in china就物美价廉
2009-10-05 07:10
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:0 
13楼的程序是得出结果了,不过能说下你的思路
2009-10-05 07:15
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
额,好吧,这个是最长不上升子序列……

程序代码:
#include <stdio.h>
#include <stdlib.h>

#define N ((int)1e6 + 1)
int n, a[N], bn, b[N], c[N], d[N];

int main(void)
{
    int i, cur;

    while (scanf("%d", &n) == 1)
    {
        for (i = 0; i < n; ++i)
            scanf("%d", &a[i]);
        for (i = 0, bn = -1; i < n; ++i)
        {
            if (bn == -1 || a[i] <= b[bn])
                b[cur = ++bn] = a[i];
            else
            {
                int low = 0, high = bn, mid;
                while (mid = (low + high) >> 1, low + 1 < high)
                {
                    if (a[i] < b[mid])
                        low = mid;
                    else if (a[i] >= b[mid])
                        high = mid;
                }
                if (b[low] <= a[i])
                    b[cur = low] = a[i];
                else
                    b[cur = high] = a[i];
            }
            c[cur] = i;
            d[i] = cur ? c[cur - 1] : -1;
        }
        cur = c[bn];
        for (i = bn; i >= 0; --i)
        {
            b[i] = a[cur];
            cur = d[cur];
        }
        for (i = 0; i <= bn; ++i)
            printf("%d ", b[i]);
        putchar('\n');
    }
    return 0;
}

/* cc: run += '<in' */


输入数据分多行,每一行第一个数字N是导弹的数目,不超过1e6,后面有N个数字,分别是导弹高度。每个测试输出一行,为能击落的导弹的高度。

比如题设的输入为:
7 300 250 275 252 200 138 245

输出为:
300 275 252 200 138

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-10-05 13:48
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
思路是:在给定高度数组中,从第一个数为最大数找最长的降序数列,记下长度和数列,再从第二个数为最大数找最长的降序数列,如此次查找到的长度比之前的长度长,就更新长度,记下数列。再从第三……,第四……,直到剩下的数长度小于等于前面记下的长度就停止查找,因为再查找下去的长度都超不过前面记下的长度,这时输出记下的长度和数列就是给定数组中的最长降序数列。

努力—前进—变老—退休—入土
2009-10-05 15:50
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:这个方法速度比较慢,有更快的办法。再想想。另:如果有兴趣让我指导一下你的那个推箱子,就加我QQ

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-10-05 15:53
快速回复:防御导弹问题:最多能拦截多少导弹
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022840 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved