【技巧】数组作为另一个数组的下标

数组作为另一个数组的下标,这相当于统计了。。我目前有三处遇到了。

其一:

是笔试题里的,有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同。写一个搜索算法找出相同的那个数的值(注意空间效率和时间效率要尽可能低)

这题目,我能整出来的是暴力搜索了。。。。回来给小曹一看,他看了不到半分钟,说可以再申请一个100的数组,然后把题目中数组作为下标,然后看哪个是2的,就是了。

大概就是下面的代码:

		//a[100]
		int b[100]={0};
		for(int i=0;i<100;i++)
		{
			b[a[i]]++;
		}
		for(int j=0;j<100;j++)
		{
			if(b[j]==2)
				return j;
		}

其二:还是一个笔试题:请在小于99999的正整数中找到符合下列条件的数,它既是完全平方数,又有两位数字相同,如144,676。

这题想了好久,没有啥好办法,遂百度了一下:

#include
#include 
//函数havesamenum确认num是否满足条件
 int havesamenum(int num)
 { 
 int i=0,j; 

 	char a[10] = {0};  
 
 	while(num>0) 
 	{ 
             j=num%10;  
 		a[j]+=1;  //这里也算是的
 
		num=num/10;  
	} 

 	while(a[i]<=1&&i<10)  
 		i++; 
	if (i<10)    
		return 1; 
 	else 
	   return 0; 
}

 
void main(void)
 { 
  
	 int i,j,m;   

	m=(int)sqrt(99999); 
 	for(i=1;i


其三:是在直方图里面,统计各个灰度值的个数的时候

你可能感兴趣的:(初步编程)