| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5538 人关注过本帖, 3 人收藏
标题:这个C程序怎么编?
只看楼主 加入收藏
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
我今天才看见 啊
2013-06-03 10:28
神经不正常
Rank: 2
等 级:论坛游民
帖 子:16
专家分:52
注 册:2013-5-23
收藏
得分:0 
感觉是散列表,冲突检查有点难。
2013-06-03 11:03
wsws23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
收藏
得分:0 
不知道有没有没考虑的 希望大家指正
头文件
#include "iostream"
using namespace std ;
typedef struct Element
{
    int StartTime ;
    int EndTime ;
    int Value ;
} Element ;
void CreatElement(Element* &e , int* num) ;
void DeleteElement(Element* &e);
void SortElement(Element* e , int num);
void Compete(Element* e , int num);
源文件
#include "MachineWork.h"
void CreatElement(Element* &e , int* num)
{
    int n , i  ;
    /*cout<<"Please input the num of element: ";*/
    cin>>n ;
    *num = n ;
    Element* ElementPtr = new Element[n] ;
    if(!ElementPtr)
        return ;
    for(i = 0 ; i < n ; ++i)
    {
        cin>>ElementPtr[i].StartTime>>ElementPtr[i].EndTime
            >>ElementPtr[i].Value;
    }
    e = ElementPtr ;
}
void DeleteElement(Element* &e)
{
    delete[] e ;
    e = NULL;
}
void SortElement(Element* e , int num)
{
    Element temp_e ;
    int i , j;
    for(i = 0 ; i < num ; ++i)
    {
        for(j = i ; j < num ; ++j)
        {
            if(e[i].StartTime > e[j].StartTime)
            {
                temp_e = e[i];
                e[i] = e[j] ;
                e[j] = temp_e ;
            }
        }
    }
}
void Compete(Element* e , int num)
{
    int* array_ptr = new int[num] ;
    int i , j ,k , temp;
    if(!array_ptr)
        return ;
    memset(array_ptr , 0 , sizeof(int)*num);
    for(i = 0 ; i < num  ; ++i)
    {
        array_ptr[i] = e[i].Value;
        for(j = i ; j < num - 1 ; ++j)
        {
            if(e[j].EndTime <= e[j + 1].StartTime )
            {
                array_ptr[i] += e[j + 1].Value;
            }
            else
            {
                if(e[i].EndTime <= e[j + 2].StartTime && j+2 < num)
                    array_ptr[i] += e[j + 2].Value ;
                else
                    ++j;
            }
        }
        for(k = i ; k > 0 ; --k)
        {
            if(e[k].StartTime >= e[k-1].EndTime)
                array_ptr[i] += e[k - 1].Value;
            else
            {
                if(e[i].StartTime >= e[k-2].EndTime && k-2 >=0)
                {
                    array_ptr[i] += e[k-2].Value;
                }else
                    --k;
            }
        }
    }
    temp = array_ptr[0]  ;
    cout<<temp<<endl;
    delete[] array_ptr ;
    array_ptr = NULL ;
}
int main()
{
    Element* e = NULL ;
    int num ;
    CreatElement(e , &num) ;
    SortElement(e , num);
    Compete(e , num);
    DeleteElement(e) ;
    return 0 ;
}
2013-06-03 12:51
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
版主给几组数据给我们测试一下吧,

练就一身本领,只为笑傲江湖!
2013-06-03 13:01
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
这是我的代码(题意应该没有理解错),写的不好,切勿见笑
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int start;
    int end;
    int price;
}node;

int search(node *a , int i , int num)
{
    int j = 0 , max = 0 , total;
    for( ; j < num ; j++)
    {
        total = 0;
        if(a[j].start >= a[i].end && j != i) 
        {
            total += a[j].price ;
            total += search(a , j , num);
            if(total >= max) max = total;
        }
    }
    return max;
}

int main()
{
    int num = 0 , total = 0 , max = 0;
    printf("请输入数据组数:\n");
    scanf("%d" , &num);
    node *a = (node *)malloc(sizeof(node) * num);
    int i = 0;
    printf("请依次输入各组数据:\n");
    for( ; i < num ; i++)
        scanf("%d%d%d" , &(a[i].start) , &(a[i].end) , &(a[i].price));
    for(i = 0 ; i < num ; i++)
    {
        total = a[i].price;
        total += search(a , i , num);      //以i为起点开始寻找,每次找开始时间大于其结束时间的;
        if(total >= max) max = total ;
    }
    printf("\n结果为 :%d\n" , max);
    free(a);
    return 0;
}


[ 本帖最后由 笑傲 于 2013-6-3 23:51 编辑 ]

练就一身本领,只为笑傲江湖!
2013-06-03 13:18
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
留个标记,方便查看...!

仰望星空...........不忘初心!
2013-06-03 16:18
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
等高手...!


[ 本帖最后由 Susake 于 2013-6-3 18:54 编辑 ]

仰望星空...........不忘初心!
2013-06-03 16:59
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
mark一下.
2013-06-03 17:17
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:0 
2013-06-03 21:14
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
以下是引用Susake在2013-6-3 16:18:05的发言:

留个标记,方便查看...!

我也留一个!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-03 22:49
快速回复:这个C程序怎么编?
数据加载中...
 
   



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

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