|
|
1、另外定义一个相同大小的数组b,用原数组a中的数值,作b数组中的下标值,b数组一开始可以把它所有元素初始化为-1
2、当第一步赋值完毕后,得到的数组b肯定有两个位置为空。然后判断到初始化元素等于-1的位置再加1就是我们所求的数组a中的值了 。
代码如下,可能会有问题,大家可以测试看看:- #include <stdio.h>
- #include <string.h>
- int FindTwo(int a[], size_t len, int *n1, int *n2)
- {
- int b[1000] = {0};
- int i,flag = 0;
- if (len<2 || len >1000)
- {
- return -1;
- }
- memset(b,-1,sizeof(b));
- for ( i=0; i<len; i++)
- {
- b[a[i]-1] = a[i];
- //b[a[i]-1]++; //此句也可以达到效果
- }
- for (i=0; i<len; i++)
- {
- if (b[i] == -1 && flag == 1)
- {
- *n1 = i + 1;
- }
- else if(b[i] == -1)
- {
- *n2 = i + 1;
- flag = 1;
- }
- }
- return 0;
- }
- int main()
- {
- int a[] = {2,3,7,8,1,4,5,5,6,6}; //此处为测试数组
- int n1,n2;
- FindTwo(a,sizeof(a)/sizeof(a[0]),&n1,&n2);
- printf("%d %d\n",n1,n2);
- return 0;
- }
复制代码
|
|