PAT
基础编程题目集(函数题1-13)题解
更多详见>>
OJ题解系列 目录导航帖
6-1 简单输出整数 (10 分)
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 分)
int Sum (int List[], int N ){
int sum = 0;
for(int i=0;i<N;i++){
sum += List[i];
}
return sum;
}
6-4 求自定类型元素的平均 (10 分)
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 分)
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 分)
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;
}
}
|