| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 303 人关注过本帖
标题:一个投票算法!请高手指出错误!
收藏  订阅  推荐  打印 
wwwjw
Rank: 1
等级:新手上路
帖子:25
积分:390
注册:2007-12-28
一个投票算法!请高手指出错误!

int i,j,index[100];
    for(i=0;i<100;i++)
    {
        for(j=0;j<10;j++)
          if(xx[i][j]==0) continue;     /* 哪一行全为0,便把这一行的标示赋值为1*/
          if(j==9) index[i]=1;
        for(j=0;j<10;j++)
          if(xx[i][j]==1) continue;        /* 哪一行全为1,便把这一行的标示赋值为1*/
          if(j==9) index[i]=1;
        if(index[i]!=1)              /* 统计标示不为1的行(即改行不全为0或者1)*/
        {
            for(j=0;j<10;j++)         /* 的对应列的1数字出现的次数*/
            if(xx[i][j]==1) yy[j]++;
        }


这个算法有问题吗?
我没看出来,可运行的时候显示每个列的1出现的次数都为0???????????????
搜索更多相关主题的帖子: 算法  index  continue  赋值  
2008-4-10 09:30
广陵绝唱
Rank: 4
等级:高级会员
威望:1
帖子:832
积分:9811
注册:2008-2-15

这个xx[][]和yy[][]是从哪来的?

能不能把源码贴上来?
2008-4-10 09:49
wwwjw
Rank: 1
等级:新手上路
帖子:25
积分:390
注册:2007-12-28

10个人100行的数据文件f.dat,存放格式每行长度均为10位,每行第一位数表示第一个人的选中情况,第二位数表示第二人的选中情况,依次类推,内容均为1或者0字符,1表示选中,0表示未被选中,全选或者全不选均视为无效选票,先把数据文件f.dat读入xx[100][11],编制函数统计每个人的选票数,把得票数分别存入到y[0]到y[9],我的这个函数就是想实现统计选票,下面是我改进的函数,改进了一下,不过还是错误,和同学商量,都没觉得有错误?
int i,j=0,k;
    char *p;
    for(i=0;i<100;i++)
    {
        p=xx[i];
        while(*p)
        {
            if(*p=='0') j++;
             p++;
        }

        if(j!=0&&j!=10)
        {
            for(k=0;k<10;k++)
            yy[k] += xx[i][k]-'0';
        }
2008-4-10 10:39
广陵绝唱
Rank: 4
等级:高级会员
威望:1
帖子:832
积分:9811
注册:2008-2-15

因为没作过这个程序,也无法测试,所以提个建议:

    你把100行10列,存入另一个数组,改为10行100列,然后依次计算列数,应该比较容易些。
2008-4-10 11:55
广陵绝唱
Rank: 4
等级:高级会员
威望:1
帖子:832
积分:9811
注册:2008-2-15
试着作了一个,你看是否可行?

因为没有测试,也无法验证它的正确性,请您看一看,希望对您有参考价值。
我是作的10行100列的数组。
程序代码:
int i,j,depiao;
for(i=0;i<10;i++) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   行
{
        depiao=0;  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 把记数器赋零
        for(j=0;j<100;j++)//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  列
        {
               if(xx[i][j]==1)  //~~~~~~~~~~~~~~~~~~~~~~~  如果xx[i][j]为1,证明有选票
                        depiao++;   //~~~~~~~~~~~~~~~  记数器加1
        }
        yy[i]=depiao;   //~~~~~~~~~~~~~~~~~~~~~~~~~`  把得票数赋在另一数组中
        if(depiao==0||depiao==100) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  如果得票数为零或为全票
        {
                printf("yy[%d]为无效票!\n",i);
                continue;   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`声明此票作废,执行下一行
        }
        printf("yy[%d]得票数为:%d\n\n",i,depiao);  //~~~~~~~~~~~~ 输出每一行的得票数
}
2008-4-10 12:15
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.063640 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved