LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 756|回复: 5

关于数组输出的问题,应该很有针对性!

[复制链接]
发表于 2005-5-5 10:17:08 | 显示全部楼层 |阅读模式

  1. /*用一维数组解决下列问题:取20个10-100之间的数,没读取一个数是如果和它前面读取的数不想等时就打印,这个数,如果相等就不打印而接着读取下面的数*/
  2. #define size 20
  3. void print(int array[],int n)
  4. {
  5.     int i=1,j,flag;
  6.     printf("%3d",array[0]);
  7.     while(i<n)
  8.     {
  9.         for(j=0;j<i;j++)
  10.         {
  11.         if(array[j]==array[i])
  12.              flag=1;
  13.         else if(array[j]!=array[i])
  14.             flag=0;
  15.         }
  16.         if(flag==0)
  17.         {
  18.              printf("%3d",array[i]);
  19.              i++;
  20.         }
  21.         else if(flag==1)
  22.                 i++;           
  23.     }
  24.     printf("\n");
  25. }
  26. main()
  27. {
  28.     int a[size]={1,2,3,4,5,6,7,7,9,0,1,2,3,7,5,6,7,8,9,0,};
  29.     print(a,size);
  30. }   
复制代码

我的输出是:

  1. [fydream@fydream c语言]$ gcc -ggdb3 -o fydream exercise6-15.c
  2. exercise6-15.c:30:6: warning: no newline at end of file
  3. [fydream@fydream c语言]$ ./fydream
  4.   1  2  3  4  5  6  7  9  0  1  2  3  7  5  6  7  8  9  0
  5. [fydream@fydream c语言]$
复制代码

正确的输出应该为  1   2   3   4   5   6   7   9   0   8
为什么只把第一个重复的两个7删除了一个,为什么后面的1  2  3  7  5  6  9  0没有被监测出重复
没有没有被删除?谢谢指教!!!!!!!!!!!!!!!!!!!!!!
发表于 2005-5-5 10:42:14 | 显示全部楼层

  1. #define size 20
  2. void print(int array[],int n)
  3. {
  4.         int i=1,j,flag;
  5.         printf("%3d",array[0]);
  6.         while(i<n)
  7.         {
  8.                 for(j=0;j<i;j++)
  9.                 {
  10.                         if(array[j]==array[i]){
  11.                                 flag=1;
  12.                                 break;
  13.                         }
  14.                         else if(array[j]!=array[i])
  15.                                 flag=0;
  16.                 }
  17.                 if(flag==0)
  18.                 {
  19.                         printf("%3d",array[i]);
  20.                         i++;
  21.                 }
  22.                 else if(flag==1)
  23.                         i++;
  24.         }
  25.         printf("\n");
  26. }
  27. main()
  28. {
  29.         int a[size]={1,2,3,4,5,6,7,7,9,0,1,2,3,7,5,6,7,8,9,0,};
  30.         print(a,size);
  31. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-5 10:49:06 | 显示全部楼层
谢谢兄弟的指教,马虎大意害死人呀,呵呵!
回复 支持 反对

使用道具 举报

发表于 2005-5-5 16:02:15 | 显示全部楼层
这种算法效率不高,复杂度是n的平方。
改进一下,复杂度就是线性的啦。

  1. #include <stdio.h>

  2. #define size 20
  3. void print(int array[],int n)
  4. {
  5.         char h[101] = {0};
  6.         int i,t;

  7.         for (i=0; i<n; i++) {
  8.                 t = array[i];
  9.                 if(hash[t] == 0) {
  10.                         printf("%3d", array[i]);
  11.                         hash[t] = 1;
  12.                 }
  13.         }
  14.         printf("\n");
  15. }

  16. int main()
  17. {
  18.         int a[size]={1,2,3,4,5,6,7,7,9,0,1,2,3,7,5,6,7,8,9,0,};
  19.         print(a,size);
  20. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-29 11:46:02 | 显示全部楼层
知道了,谢谢版主!
回复 支持 反对

使用道具 举报

发表于 2005-5-31 06:16:50 | 显示全部楼层

不知道怎样

#include <stdio.h>
#define SIZE 20
void pr(int s);
int main()
{
        int s[SIZE]={1,2,3,5,5,3,7,8,7,9,3,4,5,2,5,4,8,9,7,6};
        int i;
        for(i=0;i<SIZE;i++){
                pr(s);
        }
}
void pr(int s)
{
        static int f[SIZE];
        static int t=0;
        int i;
        int k=1;
        for(i=0;i<t;i++){
                if(s==f){
                        k=0;
                }
        }
        if(k){
                f=s;
                t++;
                printf("  %d",s);
        }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表