PAT 基础编程题目集(函数题1-13)题解

PAT

基础编程题目集(函数题1-13)题解

--------------------------------------------------------------------------------

题目传送门

基础编程题目集(函数题1-13)
--------------------------------------------------------------------------------

这里是基础编程题目集(函数题1-13)
有别于其他算法题目的是,这个部分只需完成函数部分的编写,而不需要完整的书写整个程序,更加侧重于对特定算法的考察。
该部分考察较为基础,主要包括模拟、数论、二分、排序等C/C++初级知识

接下来就是题解部分了,每道算法题都标注有对应的算法标签,对于那些易错、较难或是测试点比较特殊的题目会着重标注,本章推荐的题目有:

6-11 求自定类型元素序列的中位数 (25 分)希尔排序

--------------------------------------------------------------------------------

6-1 — 6-13(已更新至最新!)

更多详见>>

OJ题解系列 目录导航帖
--------------------------------------------------------------------------------

6-1 简单输出整数 (10 分)

算法标签: for循环

void PrintN(int N){
	for(int i=1;i<=N;i++){
		printf("%d\n",i);
	}
} 

6-2 多项式求值 (15 分)

算法标签: 进制

double f( int n, double a[], double x ){
	double res = 0;
	double t = 1.0;
	for(int i=0;i<=n;i++){
		res += (a[i]*t);
		t = t*x;
	}
	return res;
}

6-3 简单求和 (10 分)

算法标签: for循环

int Sum (int List[], int N ){
	int sum = 0;
	for(int i=0;i<N;i++){
		sum += List[i];
	}
	return sum;
}

6-4 求自定类型元素的平均 (10 分)

算法标签: for循环

ElementType Average(ElementType S[],int N){
	ElementType sum = 0.0;
	for(int i=0;i<N;i++){
		sum += S[i];
	}
	sum /= (N*1.0);
	return sum;
}
 

6-5 求自定类型元素的最大值 (10 分)

算法标签: 排序

ElementType Max( ElementType S[], int N ){
	ElementType maxn = S[0];
	for(int i=1;i<N;i++){
		if(S[i]>maxn){
			maxn = S[i];	
		}
	}
	return maxn;
}

6-6 求单链表结点的阶乘和 (15 分)

算法标签: for循环

int FactorialSum( List L ){
	int sum = 0;
    int muti;
    while(L){
    	muti = 1;
    	for(int i=2;i<=L->Data;i++){
    		muti *= i;
		}
        sum += muti;
        L = L->Next;
    }
    return sum;
}

6-7 统计某类完全平方数 (20 分)

算法标签: 模拟

int IsTheNumber ( const int N ){
	int a[10] = {0};
	int flag1 = 0;
	int flag2 = 0;
	int T = N;
	while(T){
		a[T%10]++;
		T = T/10; 
	}
	for(int i=0;i<10;i++){
		if(a[i]>=2){
			flag1 = 1;
			break;
		}
	}
	int x = (int)(sqrt(N*1.0)); 
	if(x*x == N){
		flag2 = 1;
	} 
	if(flag1 && flag2){
		return 1;
	}else{
		return 0;
	}
}

6-8 简单阶乘计算 (10 分)

算法标签: for循环

int Factorial( const int N ){
	if(N<0){
		return 0;
	}else if(N==0){
		return 1;
	}else{
		int sum = 1;
		for(int i=1;i<=N;i++){
			sum = sum * i;
		}
		return sum;
	}
}

6-9 统计个位数字 (15 分)

算法标签: 模拟

int Count_Digit ( const int N, const int D ){
	int N1;
	if(N<0){
		N1 = -N;
	}else if(N>0){
		N1 = N;
	}else if(N==0){
		N1 = 0;
	}
	int a[10] = {0};
	if(N1==0){
		a[0]++;
	}
	while(N1){
		a[N1%10] ++;
		N1=N1/10;
	}
	return a[D];
} 

6-10 阶乘计算升级版 (20 分)

算法标签: 高精乘

void Print_Factorial(const int N){
	if(N<0){
		printf("Invalid input\n");
		return;
	}
	int a[10005]={1};
	
	int site = 0;
	for(int i=1;i<=N;i++){
		int jw = 0;
		for(int j=0;j<=site;j++){
			a[j] = a[j]*i + jw;
			jw = a[j]/10;
			a[j] = a[j]%10;
		}
		while(jw){
			site++;
			a[site] = jw % 10;
			jw/=10;
		}
	}
	for(int i=site;i>=0;i--){
		printf("%d",a[i]);
	}
	printf("\n");
}

6-11 求自定类型元素序列的中位数 (25 分)

算法标签: 排序(希尔排序)

ElementType Median(ElementType A[],int N){
	int i, j, mid;
	ElementType tmp;
	mid = N / 2;
	while (mid > 0) {
		for (i = mid; i < N; i++) {
			tmp = A[i];
			j = i - mid;
			while (j >= 0 && tmp < A[j]) {
				A[j + mid] = A[j];
				j = j - mid;
			}
			A[j + mid] = tmp;
		}
		mid = mid / 2;
	}
	return A[N / 2];
}

6-12 判断奇偶性 (10 分)

算法标签: 数论

int even( int n ){
	if(n%2){
		return 0;
	}else{
		return 1;
	}
}

6-13 折半查找 (15 分)

算法标签: 二分

int Search_Bin(SSTable T, KeyType k){
	int left = 1;
	int right = T.length;
	while(left<right){
		int mid = (left+right) >> 1;
		if(T.R[mid].key<k){
			left = mid+1;
		}else{
			right = mid;
		}
	}
	if(T.R[left].key == k){
		return left;
	}else{
		return 0;
	}
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值