已知求Sn的公式:
S
n
=
∑
i
=
1
n
i
S_{n} = sum _{i=1}^{n}i
Sn=i=1∑ni
想要求出Sn从1到20的值
#includeexpr2int psum(int n){ int ans = 0; for(int i=0;i<=n;i++) ans+= i; return ans; } int main(){ int m; scanf("%d",&m); for(int i=1;i<=20;i++){ printf("%-5d",psum(i)); if(!(i%4)) putchar('n'); } return 0; }
使用基于指针进行双向地址传递的函数来同时返回一个数组之中的最大值和最小值
#include#include #include void max_min(double *num, double *max, double *min){ int n; for(n =1; n<10; n++){ if(num[n]>*max) *max = num[n]; if(num[n]<*min) *min = num[n]; } } int main(){ double *k = (double*)malloc(sizeof(double)*10); double max=0.00, min=0.00; srand((unsigned)time(NULL)); for(int i=0;i<10;i++){ k[i]= (rand()%1000)/77.0000; printf("%-8.3f",k[i]); } min = k[0]; putchar('n'); max_min(k,&max,&min); printf("%ft%f",max,min); return 0; }
Line16 Line 18 使用当前的时间戳作为随机种子生成随机数。
(rand()%1000)/77.0000;
生成了伪随机的浮点数(因为rand生成的是随机整数)
需要注意的是,这个函数可以进行进一步的优化。在function之中就应该说明**min = k[0]; **而不是在main函数里面才说。
没有21行的话会导致输出min0.0000
考虑数据范围!!
expr3判断一个数是不是“回归数”,即满足:
a
n
s
=
∑
i
=
0
n
−
1
x
i
n
a
n
s
=
∑
j
=
1
n
−
1
1
0
j
∗
x
j
ans = sum ^{n-1}_{i = 0} x_{i}^{n} \ ans = sum_{j = 1}^{n-1} 10^{j} * x_{j}
ans=i=0∑n−1xinans=j=1∑n−110j∗xj
#include#include int regress(int m){ int temp = m, ans = 1,sum=0; while(temp/=10) ans++; temp = m; for(;temp;temp/=10) sum+= pow(temp%10,ans); if(sum == m) return 1; else return 0; } int main(){ for(int i=100;i<1000;i++){ if(regress(i))printf("%-5d",i); } return 0; }
regress先通过while循环来实现判断一个数字的长度,然后判断一个数是否为回归数。
expr4使用递归来实现求组合数
#includeint Combi(int n, int m){ if(n>m/2) return Combi(m-n,m); else if(n == 1) return m; else if(n == 0) return 1; else return Combi(n,m-1)+ Combi(n-1,m-1); } int main(){ int n,m; scanf("%d,%d",&n,&m); printf("%d",Combi(n,m)); return 0; }
C m n = { C m 0 = 1 , n = 0 ; C m 1 = m , n = 1 ; C m n = C m m − n , n > m 2 ; C m n = C m − 1 n + C m − 1 n − 1 ; C_{m}^{n}=left{ begin{array}{rcl} C^{0}_{m} = 1, n=0;\ C^{1}_{m} = m,n =1;\ C^{n}_{m} = C^{m-n}_{m}, n>frac{m}{2};\ C^{n}_{m} = C^{n}_{m-1} + C^{n-1}_{m-1}; end{array} right. Cmn=⎩⎪⎪⎨⎪⎪⎧Cm0=1,n=0;Cm1=m,n=1;Cmn=Cmm−n,n>2m;Cmn=Cm−1n+Cm−1n−1;
expr5#include#define square(x) (x*x) int main(){ printf("%d",square(6)/square(3)); return 0; }
主函数: expr6.c
#include#include"myfun.c" int main(){ int m; scanf("%d",&m); fun(m); return 0; }
分解质因数的函数: myfun.c
void fun(int m){
int i = 2;
printf("%d = 1",m);
while(m>1){
if(m%i==0){
m/=i;
printf("*%d",i);
}
else i++;
}
}



