| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:一道关于选举的问题,帮忙解答一下。
只看楼主 加入收藏
李小川
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
一道关于选举的问题,帮忙解答一下。
某单位决定由全体员工选举总经理,技术总监,财务总监和销售经理。有20个候选人,编号分别是1.2.3.4......19.20,从中选举4人为总经理,技术总监,财务总监和销售经理。
每个员工一张选票,每张选票最多可填写4人。请编程实现统计选票工作。
搜索更多相关主题的帖子: 选举问题 
2009-08-24 19:24
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:14 
下面的代码忽略了某一职位选票相同的情况,待改进吧。。。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define  CANDIDATES 4
const char candi[4][10] ={"zhao","qian","sun","li"};//参选人名        
const char jobs[4][29] ={"general manager","technical director",
                        "Financial Controller","marketing manager"};//职位名称

struct votepaper
{
    char paper[5];
    struct votepaper *next;
};
typedef struct votepaper vote;

void papercount(vote *head, int count[][5]);
vote *creatlist(int num);
int votecount(char *p, int i);

int main(void)
{
    vote *head;
    int num;
    int count[CANDIDATES][5] = {0};//4*4统计表

    printf("Enter the number of voter,num:\n");
    scanf("%d", &num);//选民人数
    head = creatlist(num);//建立链表
    papercount(head, count);//统计选票

    return 0;
}

vote *creatlist(int num)
{
    vote *head, *pf, *pb;
    int i;

    head = (vote *) malloc(sizeof(vote));
    head->next = NULL;

    if(head == NULL)
    {
        printf("Failed to creat list;\n");
        exit(1);
    }
    else
    {    pf = head;
        /*选民输入格式为对应人名下输入相应职位名称的
        头一个字母的大写,对于不投给他票的下面画X, */
        printf("Pls enter the characters:\n");
        printf("such as:GTF, TFGM or XXG……\n");
        printf("G: general manager           T: technical director\n");
        printf("F: Financial Controller      M: marketing manager\n");
        printf("X: means no choice of the man\n");

        for(i=0; i< num; i++)
        {
            pb = (vote *) malloc(sizeof(vote));
            printf("\n------------------------------------------\n");
            printf("candidates:\nzhao\tqian\tsun\tli\n");
            printf("------------------------------------------\n");
            scanf("%s",pb->paper);
            pf->next = pb;
            pb->next = NULL;
            pf = pb;    
        }
        
    }
    return head;
}

void papercount(vote *head, int count[][5])
{
    int i,j,max;
    int result;
    head = head->next;//头结点为空,指向其下一个结点。
    while(head != NULL)//每个结点(选民投的票)统计
    {
        for(i=0; i < CANDIDATES; i++ )
        {
            result = votecount(head->paper, i);//查表转换成对应的列数
            count[i][result]++;//行为人名,列为职位名
        }
        head = head->next;
    }
    printf("\t");
    printf("%c\t%c\t%c\t%c\n",'G','T','F','M');
    for(i=0; i < 4; i++)
    {
        printf("%5s:\t", candi[i]);
        for(j=0; j < CANDIDATES; j++)
            printf("%d\t",count[i][j]);
        printf("\n");
    }
    for(i=0; i < 4; i++) //输出统计结果,每列比较大小,每列中最大的为该职位的当选者。
    {
        max = 0;
        for(j=0; j < CANDIDATES; j++)
        {
            if(count[i][j] >count[i][max])
                max = j;
        }
        printf("Congratulations! %s is %s !\n", jobs[i], candi[max]);
    }
}

int votecount(char *p, int i)
{
    int count;
    switch(p[i])
    {
        case 'G':count = 0;break;
        case 'T':count = 1;break;
        case 'F':count = 2;break;
        case 'M':count = 3;break;
        default: count = 4;
    }
    return count;
    
}
2009-08-25 00:57
李小川
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-24
收藏
得分:0 
20个候选人怎么做啊,超过4个就不能运行
帮忙在该一下,超过4个就不能运行啊,我要20个
2009-08-26 10:49
快速回复:一道关于选举的问题,帮忙解答一下。
数据加载中...
 
   



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

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