您的位置:首页 > 其它

一些算法题

2012-10-17 20:27 211 查看
1、将一整数逆序后放入一数组中(要求递归实现)

#include <stdio.h>

void convert(int *result, int n) 
{  
	if(n>=10)   
		convert(result+1, n/10);  
	*result = n%10;  
} 
int main(int argc, char* argv[]) 
{ 
	int n = 123456789;
	int result[20]={}; 
	convert(result, n); 
	for(int i=0; i<9; i++)  
		printf("%d", result[i]);
	getchar();
}


2.求高于平均分的学生学号及成绩(学号和成绩人工输入)

#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;
typedef map<int, int> templatemap;
templatemap studet ;
void find(int &nScore) 
{  
	int number, score; 
	scanf("%d", &number);  
	if(number != 0) 
	{  
		scanf("%d", &score);  
		studet[number]=score;
		nScore +=score;
		find(nScore);   
	}
} 
int main(int argc, char* argv[]) 
{ 
	int nScore = 0;
	find(nScore);
	int nAverage = nScore/(studet.size());
	for(templatemap::iterator itr = studet.begin(); itr!=studet.end();itr++)
	{
		if(nAverage<itr->second)
			cout<<"ID:"<<itr->first<<"  Score:"<<itr->second<<endl;
	}
	getchar();
}

3、递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)

#include <stdio.h>
#include <iostream>

int find(char *str, int n)
{ 
	if(n<=1) 
		return 1; 
	if(str[0]==str[n-1]) 
	{
		return find(str+1, n-2); 
	}
	else 
	{
		return 0; 
	}
} 
int main(int argc, char* argv[])
{ 
	char *str = "abcdedcba"; 
	printf("%s: %s\n", str, find(str, strlen(str)) ? "Yes" : "No"); 
	getchar();
}


4.分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)

#include <stdio.h>
#include <iostream>

void prim(int m, int n)
{  
	if(m>n) 
	{  
		while(m%n != 0) 
			n++; 
		m /= n;   
		printf("%d*", n); 
		prim(m, n);  
	} 
	else
	{
		printf("%d", m); 
	}
} 
int main(int argc, char* argv[]) 
{ 
	int n = 100;  
	printf("%d=", n);
	prim(n, 2); 
	getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: