| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 478 人关注过本帖
标题:hdoj1004Runtime Error (ACCESS_VIOLATION) 求指导 谢谢
取消只看楼主 加入收藏
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:3 
hdoj1004Runtime Error (ACCESS_VIOLATION) 求指导 谢谢
程序代码:
#include <iostream>
using namespace std;

int main(void)
{
    char color[1000][16];
    char temp[16];
    int num[1000];
    int n=0,m=0,max=0;
    
    while (cin>>n && n!=0)
    {
        memset(num,0,1000);
        m=0;
        for (int i=0; i<n; i++)
        {
            if(i == 0)
            {
                cin>>color[i];
                ++m;
            }
            else
            {
                cin>>temp;
                for (int i=0; i<m; i++)
                {
                    if (strcmp(color[i],temp) == 0)
                        num[i]++;
                    else
                    {
                        strcpy(color[m],temp);
                        m++;
                    }
                }
            }
        }
        
        for (int j=1; j<m; j++)
        {
            if(num[max] < num[j])
                max=j;
        }
        cout<<color[max]<<endl;
    }
    
    return 0;
}
2012-11-20 15:34
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:0 
回复 2楼 rjsp
题目在这里  http://acm.hdu.

大意是;计算输入的气球颜色种类次数,输出最多的颜色。

代码重新完善了一下 提交还是Runtime Error(ACCESS_VIOLATION)

麻烦版主帮忙看看 谢谢

程序代码:
#include <iostream>
using namespace std;

int main(void)
{
    char color[1000][16];//记录气球颜色
    char temp[16];
    int num[1000];//记录气球某种颜色的次数
    int n=0,m=0,max=0;//m记录颜色种类
    
    while (cin>>n && n!=0)
    {
        memset(num,0,1000);//初始化
        m=0;
        for (int i=0; i<n; i++)
        {
            if(i == 0)//第一种颜色直接存取
            {
                cin >> color[i];
                ++m;
            }
            else//判断每次输入的颜色是否和前面相同
            {
                cin>>temp;
                for (int i=0; i<m; i++)
                {
                    if (strcmp(color[i],temp) == 0)//如果颜色相同 不记录颜色 但次数加1
                        num[i]++;
                    else
                    {
                        strcpy(color[m],temp);//如果颜色不同 就记录 颜色种类加1
                        m++;
                    }
                }
            }
        }
        max=0;
        for (int j=1; j<m; j++)//查找颜色最多的一种输出
        {
            if(num[max] < num[j])
                max=j;
        }
        cout<<color[max]<<endl;
    }
    
    return 0;
}

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-11-21 09:52
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:0 
回复 4楼 rjsp
感谢版主  学习了

您写的很简洁 学习了

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-11-21 11:42
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:0 
太感谢 又扩展了知识 谢谢


以下是引用rjsp在2012-11-21 11:59:44的发言:

如果要简洁的话,直接用 std::map
#include <map>
#include <string>
using namespace std;

int main(void)
{
    for( size_t n; cin>>n && n!=0; )
    {
        map<string,size_t> colors;

        for( size_t i=0; i<n; ++i )
        {
            string color;
            cin >> color;

            ++colors;
        }

        map<string,size_t>::const_iterator index = colors.begin();
        for( map<string,size_t>::const_iterator itor=colors.begin(); itor!=colors.end(); ++itor )
        {
            if( index->second < itor->second )
                index = itor;
        }
        cout << index->first << endl;
    }

    return 0;
}
如果要运行效率的话,用堆排序(std::make_heap)比较好,因为堆顶就是数量最大的那个元素
其次,strcmp也可以优化掉,因为只有16个字节,可以当成两个8字节的long long来比较

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-11-21 13:22
快速回复:hdoj1004Runtime Error (ACCESS_VIOLATION) 求指导 谢谢
数据加载中...
 
   



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

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