PTA基础题算法&&心得(7-1---7-12)

#整型变量存储规则

1
2
int foot=height/30.48;
int inch=(height/30.48-foot)*12;

对于C而言 整数除浮点数结果是浮点数 但存储在整型变量中会自动将浮点型化为整型,
而其本质还是浮点数。

#求和 1/1+……..1/n or 1/1-1/2+1/3……+1/n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
int n;
int i;
double sum=0.0;
int sign=1;
scanf("%d",&n);
for(i=1;i<n;i++)
{
sum+=sign*1.0/i;
sign=-sign;
}
printf("f(%d)=%f\n",n,sum);
return 0;
}

定义变量sum 不给初值直接使用的话 sum的值是随机的;
f(%d)=f(%f),n,sum 解决第n 项求和表示;
一正一负的交替相加用sign=-sign,sign的初值为-1,乘以原式,也可将sign 设为double型 初值为1.0可替代循环体,sum+=sign/i;

#整数分解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
int t;
int mask=1;
t=x;
while(t>9){
t/=10;
mask=mask*10;
}
printf("%d\n",mask);
do{
int d=x/mask;
printf("%d",d);
if(mask>9){
printf(" ");
}
x%=mask;
mask/=10;
}
while(mask>0);
printf("\n");
return 0;
}

mask的值用x的位数确定,因为不能直接消耗x,用辅助变量t存储x,mask循环要少一次10的n-1次方,用t每除10然后,mask*10,直到t大于9;
x整除mask确定第一位,然后x再对mask取余求剩下位数,mask在/10;
中间空格用mask判断mask>9,每循环一次输出一个空格;

#最大公约数 辗转相除法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
int main(){
int a,b;
int t;
scanf("%d %d",&a,&b);
while(b!=0)
{
t=a%b;
a=b;
b=t;
}
printf("gcd=%d",a);
return 0;
}
辗转相除法:如果b=0,a就是最大公约数;
否则,计算a除以b的余数,让b=a,b=a的余数;
回到第一步;
#求符合条件的整数集
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
int i,j,k;
int ctn=0;
for(i=a;i<=a+3;i++){
for(j=a ;j<=a+3;j++)
{
for(k=a;k<=a+3;k++)
if(i!=j && i!=k &&j!=k){
ctn++;
printf("%d%d%d",i,j,k);
if(ctn==6){
printf("\n");
ctn=0;
}
else printf(" ");
}
}}
return 0;
}

格式控制:用计数器ctn 记录不重复的数,每6个数换行用if(ctn==6)输出换行然后ctn归零,以此循环,用else 输出中间的空格;