标题:高手进来帮个忙歌手打分系统
只看楼主
libengang521
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-10-31
结帖率:0
 问题点数:0 回复次数:3 
高手进来帮个忙歌手打分系统
1./*创建单链表。参数为单链表结点个数,返回值为指向单链表头节点的指针*/
    NODE* CreateLink(int n);
2./*输入评委评分,存入单链表中。参数为指向已构建单链表头节点的指针*/
    void InputData(NODE* h);
3./*计算平均值。参数为指向已构建单链表头节点的指针*/
    void CalculateData(NODE* h);
4./*排序。h为为指向已构建单链表头节点的指针,n为选手个数*/
  void SortData(NODE* h,int n);
    我是个新手 还没教数据结构  
    本程序是歌手打分系统
    求3,4步代码
    第3步,去掉1个最高分,去掉1个最低分,取平均值,总共9个裁判
    第4步,冒泡排序下就行
搜索更多相关主题的帖子: 歌手 系统 
2009-11-04 16:18
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
得分:0 
void sort(LinkList h)
{
    LinkList p,q;                              /*值变换,选择法排序*/
    int t;
    p=h->next;q=p->next;
    while(q)
    {
        while(q)
        {
            if(p->data>q->data)
            {
                t=p->data;
                p->data=q->data;
                q->data=t;
            }
            q=q->next;
        }
        p=p->next;q=p->next;
    }
}

第三步,设指针p_max(存放链表中的最大值)指向链表中的得一个节点,r指向p_max的直接前驱,遍历整个链表,找到最大值,让p_max指向他,从链表中删除,最小值一样。

离恨恰如春草,更行更远还生。
2009-11-04 20:40
雪城白鸟
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-3-15
得分:0 
---------Node.h--------------
#include<iostream>
using namespace std;
//define the node
/*
    @param  mark
    @param  next
**/

class Node{
public:
    float mark;
    Node* next;

    Node(){
        this->mark = 0;
        this->next = NULL;
    };
    Node(float mark,Node*next):mark(0),next(NULL){
        this->mark = mark;
        this->next = next;
    };
    ~Node();
};

Node::~Node(){
    this->mark = 0;
    this->next = NULL;
};
------------------Main.cpp--------------------
#include"Node.h"
#include<iostream>
using namespace std;

Node*head = NULL;
Node*CreateLink(int n);
void InputData(Node*head);
void CalCulateData(Node*head);
void SortData(Node*head);

Node*CreateLink(int n){
    if(n>0){
        while(n>0){
            head = new Node(0,head);
            n--;
        }
    }else{
        cout<<"NULL";
        return NULL;
    }
    return head;
};

void InputData(Node*head){
    for(Node*nPoint = head;nPoint != NULL;nPoint = nPoint->next){
        cout<<"请打分   :"<<endl;
        cin>>nPoint->mark;
    }
};

void CalCulateData(Node*head){
    float mSum = 0;
    int nMarker = 0;
    float mEVG = 0;
    float bMark = head->mark,sMark = head->mark;
    for(Node*nPoint = head;nPoint != NULL; nPoint = nPoint->next){
        mSum += nPoint->mark;
        if(bMark<nPoint->mark)
            bMark = nPoint->mark;
        if(sMark>nPoint->mark)
            sMark = nPoint->mark;
        nMarker++;
    }
    if(nMarker >0){
        mEVG = (mSum-bMark-sMark)/(nMarker-2);
        cout<<"去掉最高分"<<bMark<<" 去掉最低分 "<<sMark<<" 平均分数为    :"<<mEVG<<endl;
    }
};

void swap(float n1,float n2){
    n1 = n1 + n2;
    n2 = n1 - n2;
    n1 = n1 - n2;
};

void SortData(Node*head){
    //采用冒泡排序 升序
    int size = 0;
    float marks[50];
    for(Node* tmp = head;tmp != NULL; tmp = tmp->next){
        marks[size] = tmp->mark;
        size++;
    }
    for(int i = 0; i<size-1;i++)
        for(int j = size-1;j>i;j--)
            if(marks[j]<marks[j-1])
                swap(marks[j],marks[j-1]);
    for(int m = 0;m<size;m++)
        cout<<marks[m]<<"->";
    cout<<endl;
};

void main(){

    cout<<"请输入评为个数:"<<endl;
    int nMar = 0;
    cin>>nMar;
    CreateLink(nMar);
    InputData(head);
    CalCulateData(head);
    SortData(head);

};

运行结果截图
2009-11-05 16:36
雪城白鸟
Rank: 1
来 自:吉林
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-3-15
得分:0 
---------Node.h--------------
#include<iostream>
using namespace std;
//define the node
/*
    @param  mark
    @param  next
**/

class Node{
public:
    float mark;
    Node* next;

    Node(){
        this->mark = 0;
        this->next = NULL;
    };
    Node(float mark,Node*next):mark(0),next(NULL){
        this->mark = mark;
        this->next = next;
    };
    ~Node();
};

Node::~Node(){
    this->mark = 0;
    this->next = NULL;
};
------------------Main.cpp--------------------
#include"Node.h"
#include<iostream>
using namespace std;

Node*head = NULL;
Node*CreateLink(int n);
void InputData(Node*head);
void CalCulateData(Node*head);
void SortData(Node*head);

Node*CreateLink(int n){
    if(n>0){
        while(n>0){
            head = new Node(0,head);
            n--;
        }
    }else{
        cout<<"NULL";
        return NULL;
    }
    return head;
};

void InputData(Node*head){
    for(Node*nPoint = head;nPoint != NULL;nPoint = nPoint->next){
        cout<<"请打分   :"<<endl;
        cin>>nPoint->mark;
    }
};

void CalCulateData(Node*head){
    float mSum = 0;
    int nMarker = 0;
    float mEVG = 0;
    float bMark = head->mark,sMark = head->mark;
    for(Node*nPoint = head;nPoint != NULL; nPoint = nPoint->next){
        mSum += nPoint->mark;
        if(bMark<nPoint->mark)
            bMark = nPoint->mark;
        if(sMark>nPoint->mark)
            sMark = nPoint->mark;
        nMarker++;
    }
    if(nMarker >0){
        mEVG = (mSum-bMark-sMark)/(nMarker-2);
        cout<<"去掉最高分"<<bMark<<" 去掉最低分 "<<sMark<<" 平均分数为    :"<<mEVG<<endl;
    }
};

void swap(float n1,float n2){
    n1 = n1 + n2;
    n2 = n1 - n2;
    n1 = n1 - n2;
};

void SortData(Node*head){
    //采用冒泡排序 升序
    int size = 0;
    float marks[50];
    for(Node* tmp = head;tmp != NULL; tmp = tmp->next){
        marks[size] = tmp->mark;
        size++;
    }
    for(int i = 0; i<size-1;i++)
        for(int j = size-1;j>i;j--)
            if(marks[j]<marks[j-1])
                swap(marks[j],marks[j-1]);
    for(int m = 0;m<size;m++)
        cout<<marks[m]<<"->";
    cout<<endl;
};

void main(){

    cout<<"请输入评为个数:"<<endl;
    int nMar = 0;
    cin>>nMar;
    CreateLink(nMar);
    InputData(head);
    CalCulateData(head);
    SortData(head);

};

运行结果截图
2009-11-05 16:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-291007-1-1.html




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

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