找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 414|回复: 0

1-1000之中少了两个数,找出没有出现的两个数??当然这个数组是无序的

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-8-23 21:51:29 | 显示全部楼层 |阅读模式
1、另外定义一个相同大小的数组b,用原数组a中的数值,作b数组中的下标值,b数组一开始可以把它所有元素初始化为-1
2、当第一步赋值完毕后,得到的数组b肯定有两个位置为空。然后判断到初始化元素等于-1的位置再加1就是我们所求的数组a中的值了 。
代码如下,可能会有问题,大家可以测试看看:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int FindTwo(int a[], size_t len, int *n1, int *n2)
  4. {
  5.     int b[1000] = {0};
  6.     int i,flag = 0;
  7.     if (len<2 || len >1000)
  8.     {
  9.         return -1;
  10.     }
  11.     memset(b,-1,sizeof(b));
  12.     for ( i=0; i<len; i++)
  13.     {
  14.         b[a[i]-1] = a[i];
  15.         //b[a[i]-1]++;  //此句也可以达到效果
  16.     }
  17.     for (i=0; i<len; i++)
  18.     {
  19.         if (b[i] == -1 && flag == 1)
  20.         {
  21.             *n1 = i + 1;
  22.         }
  23.         else if(b[i] == -1)
  24.         {
  25.             *n2 = i + 1;
  26.             flag = 1;
  27.         }
  28.     }
  29.     return 0;
  30. }
  31. int main()
  32. {
  33.     int a[] = {2,3,7,8,1,4,5,5,6,6};  //此处为测试数组
  34.     int n1,n2;
  35.     FindTwo(a,sizeof(a)/sizeof(a[0]),&n1,&n2);
  36.     printf("%d  %d\n",n1,n2);
  37.     return 0;
  38. }
复制代码




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

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 15:20 , Processed in 0.139516 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

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