算法实战(一)
2024-01-09 14:08:16
基础编程题
题目来源(PAT题目)
6-2 多项式求值
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf("%lf", &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
题解:
double f( int n, double a[], double x ){
int i;
double sum=0;// 用于求和
for(i=0;i<=n;i++)
sum+=(a[i]*pow(x,i)); // pow是math里面库函数,使用时注意x,i为浮点数
return sum;
}
6-5 求自定类型元素的最大值
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
typedef float ElementType;
ElementType Max( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));
return 0;
}
/* 你的代码将被嵌在这里 */
题解一:
ElementType Max( ElementType S[], int N )
{
ElementType maxNum=S[0];
for(int i = 1;i<N;i++)
{
// 使用三元表达式
maxNum = maxNum> S[i]? maxNum : S[i];
}
return maxNum;
}
题解二:
ElementType Max( ElementType S[], int N )
{
ElementType maxNum=S[0]; // 假设下标为0的元素为最大值
for(int i = 1;i<N;i++)
if(maxNum<S[i]) // 如果maxNum小于S[i],就更新
maxNum=S[i];
return maxNum;
}
6-6 求单链表结点的阶乘和
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node {
int Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
int FactorialSum( List L );
int main()
{
int N, i;
List L, p;
scanf("%d", &N);
L = NULL;
for ( i=0; i<N; i++ ) {
p = (List)malloc(sizeof(struct Node));
scanf("%d", &p->Data);
p->Next = L; L = p;
}
printf("%d\n", FactorialSum(L));
return 0;
}
/* 你的代码将被嵌在这里 */
题解:
// 采用递归求阶乘
int Factorial(int n){
if(n==0)
return 1;
return n*Factorial(n-1);
}
int FactorialSum( List L ){
PtrToNode p;
int Fsum=0;
p=L;
while(p){ // 遍历整个链表
Fsum+=Factorial(p->Data);
p=p->Next;
}
return Fsum;
}
6-7 统计某类完全平方数
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
题解:
int IsTheNumber ( const int N ){
// sqrt函数返回值为double类型,由于定义的是int数据,在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型,如果不是完全平方数的话,后面肯定会损失精度
int number=N,array[10]={0},m=sqrt(number);
if(m*m==number){ // 判断是不是完全平方数
while(number){
array[number%10]++; //使用辅助数组记录每个位出现的次数
number/=10;
}
for(int i=0;i<=9;i++){ // 遍历循环,如果对应位置大于1,就说明至少有两位数字相同
if(array[i]>1)
return 1;
}
}
return 0;
}
C语言类型转换:详细讲解
6-9 统计个位数字
裁判测试程序样例:
#include <stdio.h>
int Count_Digit ( const int N, const int D );
int main()
{
int N, D;
scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}
/* 你的代码将被嵌在这里 */
题解:
int Count_Digit ( const int N, const int D ){
int number,count=0;
if(N>0)
number=N;
else
number=-N;
if(N==0&&D==0) // 如果是0的话,统计也是0出现的次数,直接返回1即可。
return 1;
while(number){ // 遍历去判断每一位是否和给出的D相同
if(number%10==D)
count++;
number/=10;
}
return count;
}
文章来源:https://blog.csdn.net/m0_49635911/article/details/135476724
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!