[toc]

三个数从大到小排序输出

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
int main()
{
int a = 0;
int b = 0;
int c = 0;
int temp = 0;
scanf("%d%d%d", &a, &b, &c);//输入数值

//比较大小交换部分
if (a < b)
{
temp = a;
a = b;
b = temp;
}
if (a < c)
{
temp = a;
a = c;
c = temp;
}
if (b < c)
{
temp = b;
b = c;
c = temp;
}

//输出部分
printf("%d%d%d", a, b, c);
return 0;
}

打印1~100之间所有3的倍数的数字

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
int i = 0;
for (i = 1;i <= 100; i++)
{
if (i % 3 == 0)//注意==才是等于,一个=是赋值
{
printf("%d", i);
}
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
//3开始不断加3
int main()
{
int i = 0;
for (i = 3; i<=100; i+=3)
{
printf("%d ", i);
}
return 0;
}

给定两个数,求最大公约数

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
int main()
{
int m = 0;
int n = 0;
int max = 0;
scanf("%d%d", &m, &n);//24 18
//最大公约数必定不能大过较小的那个数

//比较部分
if (m > n)
{
max = n;
}
else
{
max = m;
}
while (1)//恒真恒循环的意思
{
if (m & max == 0 && n % max == 0)
{
printf("最大公约数是:%d\n", max);
break;
}
max--;
}
return 0;
}

辗转相除法

一开始的思路,用if判断是否为0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
int m = 0;
int n = 0;
int t = 0;
scanf("%d%d", &m, &n);
while (1)
{
t = m % n;
if (t == 0)
{
printf("最大公约数是:%d\n", n);
break;
}
else
{
m = n;
n = t;
}
}
return 0;
}

另一种思路,利用while(m%n),如果模为0,跳出while循环,也就是利用while循环定义,只有0为假,其他都为真。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int m = 0;
int n = 0;
int t = 0;
scanf("%d%d", &m, &n);
while (t = m % n)
{
m = n;
n = t;
}
printf("%d\n", n);
return 0;
}

为何不比较m n的大小?
由于模运算定义,小%大 对计算机而言就是 大%小,已经交换过大小顺序

最小公倍数

利用最大公约数,最小公倍数就等于

最小公倍数=mn最大公约数最小公倍数=\cfrac{m \cdot n}{最大公约数}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
int m = 0;
int n = 0;
int t = 0;
scanf("%d%d", &m, &n);
int min = m * n;//一开始就给它先乘上,否则在后续步骤中m n被重新赋值,得到的就不是原本的m n的最小公倍数

//求最大公因数部分
while (t = m % n)
{
m = n;
n = t;
}

//两数乘积除以最大公因数就是最小公倍数
min = min /n;

//输出部分
printf("%d\n", min);
return 0;
}

打印1000到2000之间的闰年

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
int y = 0;
for (y = 1000; y <= 2000; y++)
{
//判断闰年
//1.被4整除,不被100整除
//2.被400整除
if (y%400 == 0)
{
printf("%d", y);
count++;
}
}
return 0;
}

使用||(或者)和 &&(并且)的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int y = 0;
int count = 0;
for (y = 1000; y<= 2000; y++)
{
if ((y %4 == 0 && y% 100 != 0)||(y % 400 == 0))
{
printf("%d ",y);
count++;
}
}
return 0;
}