c - 如何对非常大的数字进行排序

标签 c

如何对非常大的数字进行排序

03 10103538 2222 1233 6160 0142 
03 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142 
30 10103538 2222 1233 6160 0141 
30 10103538 2222 1233 6160 0142

用 C 语言

最佳答案

这是一个类似的 SPOJ 问题 http://www.spoj.pl/problems/SBANK/

您可以使用基数排序或简单地通过二叉搜索树来解决它(我就是这样做的)。

这是您在 C++ 中的操作方式(在以下位置实现您自己的 std::map/std::set/二叉搜索树三)

    map<string,int> tab;
    map<string,int>::iterator it;
    char acc[40];
    int n;
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
        gets(acc);
        tab[acc]++;
    }
    for(it=tab.begin();it!=tab.end();it++)
    {
        printf("%s %d\n",it->first.c_str(),it->second);
    }
    printf("\n");

我的上述程序还打印相等数字的计数,我认为您的问题中没有指定这一点。因此,在这种情况下,简单的 std::set 或简单的二叉搜索树也可以工作。尽管在上面的问题中,我可以很容易地使用 std::set 而不是 std::map 来解决。

关于c - 如何对非常大的数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272186/

相关文章:

c - C 中两个矩阵相加

c - strcmp 总是产生相同的结果

c - typedef 函数指针和 extern 关键字

c - 我可以使用什么更准确的算法来计算数字的正弦?

c - 通过指针从 C 和 C++ 中的函数返回本地数据

c++ - 标准 C++ 中是否有一种可移植的方法来检索主机名?

c - 为什么 sizeof 未命名位域成员结构打印 1?

mysql - 如何在定时函数中从客户端代码实时接收MySQL数据库中的任何更改?

WriteFile() 函数可以停止工作吗?

c - 实现字符串指针数组的可能方法