6-1 简单输出整数
void PrintN(int N) { int i=0; for(i=1;i<=N;i++) { printf("%d\n",i); } }
6-2 多项式求值(重点掌握)
double f( int n, double a[], double x ) { double sum=0; double x0=1.0; int i=0; for(i=0;i<=n;i++) { if(a[i]) { sum+=x0*a[i]; x0*=x; } } return sum; }
6-3 简单求和
int Sum(int list[],int n) { int sum=0; int i=0; for(i=0;i<n;i++) { sum+=list[i]; } return sum; }
6-4 求自定类型元素的平均
ElementType Average( ElementType S[], int N ) { ElementType sum=0; ElementType ave=0; int i=0; for(i=0;i<N;i++) { sum+=S[i]; } ave=sum/N; return ave; }
6-5 求自定类型元素的最大值
ElementType Max( ElementType S[], int N ) { ElementType max=S[0]; int i=0; for(i=1;i<N;i++) { if(S[i]>max) { max=S[i]; } } return max; }
6-6 求单链表结点的阶乘和
后续补充
6-7 统计某类完全平方数(重点掌握)
int IsTheNumber ( const int N ) { int m=(int)(sqrt)(N); int n=m*m; if(n==N) { int num[10]={0}; int i=0; while(n) { for(i=0;i<=9;i++) { if(n%10==i) { num[i]+=1; } if(num[i]==2) { return 1; } } n/=10; } } return 0; }
6-8 简单阶乘计算
方法一(循环):
int Factorial( const int N ) { if(N<0) { return 0; } else if(N==0) { return 1; } int i=0; int ret=1; for(i=1;i<=N;i++) { ret*=i; } return ret; }
方法二(递归):
int Factorial( const int N ) { if(N<0) { return 0; } else if(N==0) { return 1; } return N*Factorial(N-1); }
6-9 统计个位数字
方法一:(此方法是我自己写的,虽然有点混乱,但好在结果正确)
int Count_Digit ( const int N, const int D ) { if(N==0) { return 1; } int tmp1=N; if(tmp1<0) { tmp1=-tmp1; } int tmp2=tmp1; int tmp3=tmp1; int i=0; int k=0;//k表示为几位数 while(tmp2) { k++; tmp2/=10; } int count=0; for(i=0;i<k;i++) { if(tmp3%10==D) { count++; } tmp3/=10; } return count; }
6-10 阶乘计算升级版(重点掌握)
void Print_Factorial(const int N) { char a[3000]; int alength = 1; a[0] = 1; if (N < 0) { printf("Invalid input"); return; } int i = 2; for (i = 2; i <= N; i++) { int z = 0; int k = 0; for (k = 0; k < alength; k++) { int t = i * a[k] + z; a[k] = t % 10; z = t / 10; } while (z) { a[alength++] = z % 10; z /= 10; } } for (i = alength - 1; i >= 0; i--) { printf("%d", a[i]); } }
6-11 求自定类型元素序列的中位数(重点掌握)
ElementType Median(ElementType A[], int N) { ElementType i = 0; for (i = 0; i < N - 1; i++) { int j = 0; for (j = 0; j < N - 1 - i; j++) { if (A[j] > A[j + 1]) { ElementType tmp = 0; tmp = A[j]; A[j] = A[j + 1]; A[j + 1] = tmp; } } } ElementType ret = 0; if (N % 2 == 0) { return ret = A[(N + 1) / 2]; } else { return ret = A[(N + 1) / 2 - 1]; } }//超时但结果正确
上述代码写的时候结果正确,但是很遗憾超时了😂不过骗点分还是没问题的,哈哈😄。
下面是我找到的另外一种做法:
ElementType Median(ElementType A[], int N) { int k = 0; ElementType tmp = 0; int i = 0; for (i = N / 2; i > 0; i = i / 2) { int j = 0; for (j = i; j < N; j++) { tmp = A[j];//将找到的中位数放到中间变量中去 for (k = j; k >= i; k = k - i) { if (tmp < A[k - i]) { A[k] = A[k - i]; } else { break; } } A[k] = tmp; } } return A[N / 2]; }
6-12 判断奇偶性
int even( int n ) { if(n%2==0) return 1; return 0; }
6-13 折半查找
后续补充
总结
6-2 多项式求值中多项式的表示方法
多项式求值中多项式即:
这里我想说的是x的i次方该如何表示,其中让我感到巧妙的是这一部分:x0*=x;。
ElementType和ElemType
Element Type:typedef int ElementType;定义Element Type为int类型
ElemType:#define ElemType int;定义ElemType为int类型
这两个的作用都是一样的,没有区别,只不过定义的方式不同而已:
对于**typedef int ElementType;是重命名
对于#define ElemType int;是宏定义**
由于笔者还没怎么接触到数据结构,所以有些更好的题解不能进行没有写到,后续再给大家补充,另外6-6和6-13也是类似情况,请谅解,我会尽力及时补充。蟹蟹各位。😀