求教大神 小弟做的一个算法 关于归类

m0_38049963 2017-03-24 04:02:44
求教大神 小弟做的一个算法 其中一步涉及到归类 给定一组按顺序排好的数 比如说{111222233} 要求将此数组相同元素归类 输出结果为{{111}{2222}{33}} 如果二维数组不好做的话 也可以是依次输出{111} {2222} {33} 有这个意思就行 但是只能用普通数组做 因为整个算法都是用普通数组设计的 我做了两天没做出来 求大神指点
...全文
116 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-03-24
  • 打赏
  • 举报
回复
你的描述已经将算法说的很明显了。 定义一个二维数组,一行存放一类的数据(相同的值),通过遍历已经排号序的数组,将相同的数据放到统一行里即可。 类似这样的:
#include <stdio.h>
#include <string.h>


int main(void)
{
    int digit_list[] = { 1, 1, 1, 2, 2, 2, 2, 3, 3,4 };
    int family[10][10];
    int idx, i = 0, j = 0;
    int len, first;


    memset(family, -1, sizeof(family));

    first = digit_list[0];
    len = sizeof(digit_list) / sizeof(digit_list[0]);
    for (idx = 0; idx < len; idx++) {
        if (digit_list[idx] == first) {
            family[i][j++] = digit_list[idx];
        } else {
            first = digit_list[idx];
            i++;
            j = 0;
            family[i][j++] = digit_list[idx];
        }
    }
    /*
    for (i = 0; i < len; i++)
        printf("%d ", digit_list[i]);
    putchar(10);
    */
    for (i = 0; i < 10; i++) {
        if (family[i][0] < 0)
            break;
        for (j = 0; j < 10; j++) {
            if (family[i][j] >= 0)
                printf("%d ", family[i][j]);
        }
        putchar(10);
    }
    return 0;
}
二维数组的行数和列数都要和一维数组相同,保证两个极限情况,都是一类或都是不同的类。
幻夢之葉 2017-03-24
  • 打赏
  • 举报
回复
这一个排序就可以了吧?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧