| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖
标题:请教一个问题,不胜感谢
只看楼主 加入收藏
mlyljc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-11
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:12 
请教一个问题,不胜感谢
要写一个程序,求一个整数序列中,非递增的个数。
输入:7 300 275 215 245 198 150 235
输出:5
搜索更多相关主题的帖子: 感谢 
2010-08-29 18:36
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:5 
设数列为A
f[i] = sigma(f[j]) (满足A[i]>=A[j], i<j)

ans = sigma(f[i]-1)


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2010-08-29 18:49
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:5 
这个输出有问题吧?怎么看都不对

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-29 18:55
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:5 
为什么是5呢,楼主可否结束一下,非递增的话,我怎么看应该是4啊~
2010-08-29 18:55
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:5 
楼主的意思可能是这样的

首先找出最长的递增数列

非递增的个数 就是不在此数列中的数

是吗



ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-08-29 19:05
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 

#include<stdio.h>
int a[]={7,300,275,215,245,198,150,235};
int b[20];//存放以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度。
int num = 10;//num为a数组的长度
int k;//存放最大递增子串最后一个元素的下标

//求出b[i]中最大的值,并将其下标存在k中
int Max() {
    int temp = 0;
    for (int i = 0; i < num; i++) {
        if (b[i] > temp) {
            temp = b[i];
            k = i;
        }
    }
    return temp;
}

// 以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度存到b[i]中
int Lis() {
    b[0] = 1;//以a[0]为最后元素的子串只有a[0],所以长度为1.
    int k;
    for (int i = 1; i < num; i++) {
        k = 0;
        for (int j = 0; j < i; j++) {
            if (a[j] <= a[i] && k < b[j]) {
            //比较所有小于a[i]并位于a[i]前面的最大子串的长度。比如3 6 4 5,那么以5结尾的最大子串长度
            //等于:max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
                k = b[j];
            }
        }
        b[i] = k + 1;//max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
    }
    return Max();
}



void main(){
    printf("最大递增子串的长度为:%d\n",Lis());
    printf("非递增个数:%d\n",8-Lis());
   
}

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-08-29 19:45
mlyljc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-11
收藏
得分:0 
可能意思没有表达清除,题目要求是任意输入一个数列,比如给的例子,输入7个数,分别为所示。非递增顺序的有300 275 215 198 150 个数为5,也就是说整数个数预先不知道。也就没有先定义如下:int a[]={7,300,275,215,245,198,150,235}。数列的个数是可以改变的,所以就想不清楚如何把要输入的整数存起来。
2010-08-29 22:39
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
呵呵
其实你说的还是不清楚。。。。。。。。。。。。。。。。。
#define n 30        你想输入多少个数改下30不就OK了

int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);

非递增数列有很多,你是要输出最长的吗。。。。。


给你写了个,上机通过。。。。。注意    它输出的时候是从小到大输出的


#include<stdio.h>
#define NUM 10
int a[NUM];


int b[NUM];//存放以a[i](0<=i<=a.length-1)为最后元素的最大非递增子串的长度。
 
int k;//存放最大非递增子串最后一个元素的下标

//求出b[i]中最大的值(即是最大非递增子串的长度),并将其下标存在k中
int Max() {
    int temp = 0;
    for (int i = 0; i < NUM; i++) {
        if (b[i] > temp) {
            temp = b[i];
            k = i;
        }
    }
    return temp;
}

// 以a[i](0<=i<=a.length-1)为最后元素的最大非递增子串的长度存到b[i]中
int Lis() {
    b[0] = 1;//以a[0]为最后元素的子串只有a[0],所以长度为1.
    int k;
    for (int i = 1; i < NUM; i++) {
        k = 0;
        for (int j = 0; j < i; j++) {
            if (a[j] >= a[i] && k < b[j]) {
            //比较所有大于a[i]并位于a[i]前面的最大子串的长度
            
                k = b[j];
            }
        }
        b[i] = k + 1;
    }
    return Max();
}

//从小到大输出非递增子串
void print(int index){
    printf("%d ",a[index]);  
    for (int i = 0; i < index; i++) {
        if (b[i] == b[index] - 1 && a[i] >= a[index]) {
            print(i);
            break;
        }
    }
}

void main(){

for(int i = 0; i < NUM; i++)

scanf("%d",&a[i]);


    printf("最大非递增子串的长度为:%d\n",Lis());
    printf("最大递增子串从小到大输出为:\n");
    print(k);
}








[ 本帖最后由 encounter 于 2010-8-30 21:59 编辑 ]

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-08-30 07:35
mlyljc
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-3-11
收藏
得分:0 
题目的要求是:个数是输入的,而不是预先定义的。
2010-08-30 12:28
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:0 
小妹妹,
学习要学会变通呀

没有万能的程序。。。。
你把NUM的值改大一点不就行了吗
不过那样会出现很多0
最后的结果的自己辨别下
难道连数一下,10改成100,都闲麻烦吗
21实际还没有那么智能
至少还得要程序员输入数据。。。。。




ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-08-30 13:00
快速回复:请教一个问题,不胜感谢
数据加载中...
 
   



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

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