轩辕互动机试题(2010-01-05 15:00~16:00)
1 求一个整型数组里不重复的数的个数。例如数组{2, 1, 1, 2, 3, 1}中的不重复的个数为3。
提供的函数原型为int Stat(int a[], int n) { }
解法一:
#include<iostream>
using namespace std;
int Stat(int a[], int n)
{
int i,j;
for(i=0; i<=n-1; i++)
{
for(j=i+1; j<=n-1; j++)
{
if(a[i] == a[j])
{
a[j] = 0;
}
}
}
int count = 0;
for(i=0; i<n; i++)
{
if(a[i] != 0)
{
count++;
}
}
return count;
}
int main(void)
{
int array[] = {2,1,1,2,3,1};
int count = Stat(array, 5);
cout<<"The total count is "<<count<<endl;
return 0;
}
运行结果:
The total count is 3
解法二(先排序后统计):
#include<iostream>
using namespace std;
int Stat(int a[], int n)
{
int i,j,temp;
for(j=1; j<n; j++)
{
for(i=0; i<n-j; i++)
{
if(a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
int count = 1;
for(i=1; i<n; i++)
{
if(a[i] > a[i-1])
{
count++;
}
}
return count;
}
int main(void)
{
int array[] = {2,1,1,2,3,1};
int Count = Stat(array, 5);
cout<<"The total count is "<<Count<<endl;
return 0;
}
运行结果:
The total count is 3
2 求一个数组里面最远的数,最远的数指的是数组里与平均值差距最大的数,比如在数组{4, 9, -3, -10}中,平均值为[9+4+(-3)+(-10)]/4 = 0, 则-10为最远的数。
提供的函数原型为int Extreme(int a[], int n) { }
解:先排序,然后把第一个数和最后一个分别与平均值相比较,求出的差的绝对值最大的那个数为平均数
#include<iostream>
using namespace std;
int Extreme(int a[], int n)
{
int i,j,temp;
// Bubble sort
for(j=1; j<n; j++)
{
for(i=0; i<n-j; i++)
{
if(a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
int sum=0;
for(i=0; i<n; i++)
{
sum += a[i];
}
int ave = sum/n;
int extreme = a[0];
int diff1,diff2;
diff1 = ave - a[0];
diff2 = a[n-1] - ave;
if(diff1 < diff2)
{
extreme = a[n-1];
}
return extreme;
}
int main(void)
{
int array[] = {9, 4, -3, -10};
int extreme = Extreme(array, 4);
cout<<"The extreme number is "<<extreme<<endl;
return 0;
}
运行结果:The extreme number is -10
3 在一个数组中存在着新数组,求出新数组的长度。新数组的规则为:把原数组的第0个元素作为新数组的第0个数,并把该元素的值作为下个元素的下标,再把下个元素的值作为下下个元素的下标……直到碰到某个元素的值为-1,则-1就是新数组的结束元素。求新数组的元素个数(包含结束元素-1)。
例如:有数组{1, 4, -1, 3, 2},在此数组中有,A[0]=1, A[1]=4, A[4]=2, A[2]=-1。则新数组中的元素为1, 4, 2, -1,其元素个数为4。3不是新数组中的元素。
提供函数的原型为int length(int a[], int n) { }
解:
#include<iostream>
using namespace std;
int Length(int a[],int n)
{
int *q = a;
int count = 0;
while(q)
{
count++;
if(*q > n)
break;
int i = *q;
if(-1 == i)
break;
q = a+(*q);
}
return count;
}
int main(void)
{
int array[] = {1, 4, -1, 3, 2};
int Count = Length(array, 5);
cout<<"The length of new array is "<<Count<<endl;
return 0;
}
运行结果:
The length of new array is 4