[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 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); 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的大小?
由于模运算定义,小%大 对计算机而言就是 大%小,已经交换过大小顺序
最小公倍数
利用最大公约数,最小公倍数就等于
最小公倍数 = m ⋅ n 最大公约数 最小公倍数=\cfrac{m \cdot n}{最大公约数}
最小公倍数 = 最大公约数 m ⋅ 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; 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++) { 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 ; }