读书人

求解数组操作算法,用C语言!该怎么解决

发布时间: 2012-08-25 10:06:20 作者: rapoo

求解数组操作算法,用C语言!
开始:1 1 6 6 7 1
a[0] a[1] a[2] a[3] a[4] a[5]

结果:1 6 7
b[0] b[1] b[2]

把数组中重复的数字只保留一次,例原数组1,1,6,6,7,1去重复数字后数组是1,6,7
求以上操作的算法.

[解决办法]
通过遍历,让第一个数和后面的数据比较,将后面重复的数据值设置为某一个值,比如第一个1和后面的数据比较,把后面的1值改为-1,然后输出时遇到-1则不输出。
[解决办法]

C/C++ code
#include <stdio.h>int main(){        int hash[1000]={0};        int num=0;        while(scanf("%d",&num)&&num!=-1){                if(hash[num]==0){                        printf("%d,",num);                        hash[num]=1;                }        }        printf("\n");}
[解决办法]
循环比较就可以了啊。
[解决办法]
要不先给数组从小到大排个序?

从第一个数开始,后面的数跟前一个数不相等就留下.
[解决办法]
第一个数和后面比较 相等则删除当前数据,否则数组下标++
[解决办法]
看看 严慰敏的 数据结构 视频
[解决办法]
探讨

第一个数和后面比较 相等则删除当前数据,否则数组下标++

[解决办法]
先排序,再跟直接后继比较,相等删除当前数,位置后移,不等,直接后移一个
[解决办法]
C/C++ code
//将out.txt文件中的内容排序并去重,结果保存到unique.txt中#include <stdio.h>#include <stdlib.h>#define MAXLNO 10000000 //能处理的最大行数#define MAXLEN 20       //能处理的最大行宽,包括行尾的\n和字符串尾的\0char buf[MAXLNO][MAXLEN];int ln,i;FILE *f;int cmpfun( const void *arg1, const void *arg2 ) {    return strcmp((const char *)arg1,(const char *)arg2);}int main() {    f=fopen("out.txt","r");    if (NULL==f) {        printf("Can not find file out.txt\n");        return 1;    }    ln=0;    while (1) {        if (NULL==fgets(buf[ln],MAXLEN,f)) break;        ln++;        if (ln>=MAXLNO) {            printf("Lines >%d ignored.",MAXLNO);            break;        }    }    fclose(f);    if (ln>1) qsort(buf,ln,MAXLEN,cmpfun);    f=fopen("unique.txt","w");    if (NULL==f) {        printf("Can not create file unique.txt\n");        return 2;    }    fprintf(f,"%s",buf[0]);    if (ln>1) for (i=1;i<ln;i++) {        if (strcmp((const char *)buf[i-1],(const char *)buf[i])) fprintf(f,"%s",buf[i]);    }    fclose(f);    return 0;} 

读书人网 >C语言

热点推荐