目录
- int main() {
- int A, B;
- scanf("%d %d", &A, &B);
- int tmp = A;
- A = B;
- B = tmp;
- printf("%d %d", A, B);
- return 0;
- }
- int main()
- {
- int a,b;
- scanf("%d %d", &a, &b);
- a = a ^ b;
- b = a ^ b;
- a = a ^ b;
- printf("%d %d", a, b);
- retu
- int Swap(int* m, int* n)
- {
- int tmp;
- tmp = *n;
- *n = *m;
- *m = tmp;
- return 0;
- }
-
- int main()
- {
- int a, b;
- scanf("%d %d", &a, &b);
- Swap(a, b);
- printf("%d %d\n", a, b);
- return 0;
- }
- int main() {
- int A, B;
- scanf("%d %d", &A, &B);
- if (A > B)
- printf("%d %d", A, B);
- if (A < B)
- printf("%d %d", B, A);
- return 0;
- }
- int main() {
- int A, B,*p,*q;
- scanf("%d %d", &A, &B);
- p = &A;
- q = &B;
- if(*p>*q)
- printf("%d %d", *p, *q);
- if (*p < *q)
- printf("%d %d", *q, *p);
- return 0;
- }
背景:依次输入10个数,找出其中最大的数
- int main() {
- int a[10] = { 0 };
- for (int i = 0; i < 10; i++)//遍历数组输入10个数
- {
- scanf("%d", &a[i]);
- }
- int max = 0; //遍历数组找出最大值
- for (int i = 0; i < 10; i++)
- {
- if (max < a[i])
- max = a[i];
- }
- printf("%d", max);
- return 0;
- }
- int main() {
- int a[10] = { 0 }, max = 0;;
- for (int i = 0; i < 10; i++)
- {
- scanf("%d", &a[i]);
- if (max < a[i])
- max = a[i];
- }
- printf("%d", max);
- return 0;
- }
- int main() {
- int n,max = 0;;
- for (int i = 0; i < 10; i++)
- {
- scanf("%d", &n);
- if (max < n)
- max = n;
- }
- printf("%d", max);
- return 0;
- }
背景:依次输入10个数,按降序输出
因为需要存储这10个数,所以这次一定要用数组了(不然创建10个变量不够优雅)
不使用排序方法排序数组,强行按降序输出,(循环较为繁琐)
- int main() {
- int a[10] = { 0 };
- int max = 0;
- for (int i = 0; i < 10; i++)
- {
- scanf("%d", &a[i]); //接收10个数
- if (max < a[i])
- max = a[i]; //得到最大值,方便后续循环建立
- }
- for (int j = max; j >= 0; j--)//从最大值开始向下遍历
- {
- for (int i = 0; i < 10; i++)//与数组内的数一一比较
- {
- if (j == a[i]) //相等则输出
- {
- printf("%d ", j);
- break; //输出后记得跳出循环,不然可能重复输出
- }
- }
- }
- return 0;
- }
冒泡排序是一种简单直观的排序算法,它重复地走访要排序的元素,依次比较相邻的两个元素,如果它们的顺序不正确就交换它们。通过多次遍历数组并比较相邻元素的大小,最大(或最小)的元素会逐渐 “浮” 到最后(或最前)的位置,最终实现整个数组的排序。
具体步骤如下:
- 从第一个元素开始,依次比较相邻的两个元素,如果顺序不正确就交换它们;
- 继续比较下一对相邻元素,执行同样的操作;
- 重复以上步骤,直到没有任何一对相邻元素需要交换位置。
冒泡排序的时间复杂度为O(n^2),其中n表示待排序元素的个数。虽然冒泡排序效率较低,但由于实现简单,适用于元素数量较少的情况。
- //冒泡排序
- void sort(int a[10]) {
- for (int i = 0; i < 10; i++) { //遍历数组10次,每次移动一项
- for (int j = 0; j < 9; j++) //移动一项,每次移动一位,最多共需移动9次
- if (a[i] < a[i + 1]) //满足条件则交换两项
- {
- int tmp = a[i];
- a[i + 1] = a[i];
- a[i + 1] = tmp;
- }
- }
- }
-
- int main() {
- int a[10];
- for (int i = 0; i < 10; i++) //通过循环接收数组
- scanf("%d", &a[i]);
- sort(a); //调用函数进行冒泡排序
- for (int i = 0; i < 10; i++)
- printf("%d\n", a[i]); //打印结果
- return 0;
- }
背景:用数组接收10个整数,逆序存储,然后输出
- int main() {
- int a[10];
- for (int i = 0; i < 10; i++) //接收数组
- scanf("%d", &a[i]);
- for (int i = 0; i < 5; i++) //逆序存储
- {
- int tmp = a[i]; //对称交换5次,通过下标确定交换对象
- a[i] = a[9 - i];
- a[9 - i] = tmp;
- }
- for (int i = 0; i < 10; i++) //输出结果
- printf("%d", a[i]);
- return 0;
- }
递归实现(最简):
递归
int fib(int n) { if (n < 3) return 1; else return fib(n - 1) + fib(n - 2); }三目表达式
int fib(int n) { return n < 3 ? 1 : fib(n - 1) + fib(n - 2); }函数实现
//斐波那契数列循环实现 int main() { int f1 = 1, f2 = 1, f3, ; printf("%d\n%d\n", f1,f2); for (int i = 1; i <= 30; i++) { f3 = f1 + f2; printf("%d\n", f3); f1 = f2; f2 = f3; } return 0; }举例是输出1-30项,稍加修改也可以得到某一项
//斐波那契数列循环实现 int main() { int f1 = 1, f2 = 1, f3, n; scanf("%d", &n); //输入想要得到的项 for (int i = 1; i <= n; i++) { f3 = f1 + f2; f1 = f2; f2 = f3; } printf("%d\n", f2); return 0; }
7.1 最大公约数
函数实现
int gcd(int a, int b){ while (b) { int t = b; b = a % b; a = t; } return a; }递归实现(进阶)
三目表达式(最简)
int gcd(int a, int b) { return b > 0 ? gcd(b, a % b) : a; }7.2 最小公倍数
1. 需调用最大公约数
int lcm(int a, int b) { return a * b / gcd(a, b); }2. 输出最大公约数和最小公倍数的实例
//输出最大公约数和最小公倍数的实例 int gcd(int a, int b) { return b > 0 ? gcd(b, a % b) : a; } int lcm(int a, int b) { return a * b / gcd(a, b); } int main() { int m, n; scanf("%d %d", &m, &n); int a =gcd(m, n); int b = lcm(m, n); printf("gcd=%d,lcm=%d",a,b); return 0; }3. 求多个数的最小公倍数
//从定义出发 int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); for (int i = 1;; i++) { if (i % a == 0 && i % b == 0 && i % c == 0) { printf("%d", i); break; } } return 0; }
- //输出1900-2000年中是闰年的年份
- int main() {
- for (int i = 1900; i <= 2000; i++)
- if (i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0)
- printf("%d ", i);
- return 0;
- }
若题目要求使用switch语句,也要牢记switch语句的用法
- switch(表达式)
- {
- case 常量1:语句1
- case 常量2:语句2
- default:语句n
- break;
- }
- int bonus(int n) {
- if (n > 1000) //写一个奖金函数,判断奖金属于哪一档
- return 1;
- else if (n > 800 && n < 1000)
- return 2;
- else if (n > 600 && n < 800)
- return 3;
- else
- return 4;
- }
-
- int main() {
- int n;
- scanf("%d", &n);
- switch (bonus(n)) //通过switch语句完成
- {
- case 1:
- printf("perfect");
- break; //使用Switch语句不要忘记加break;
- case 2:
- printf("well done");
- break;
- case 3:
- printf("good");
- break;
- case 4:
- printf("keep trying");
- break;
- }
- return 0;
- }
求100-200之间的素数
- #include
- #include
- int main()
- {
- int i;
- int count = 0;
- for (i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
- {
- int j; //定义一个变量j用来表示因子
- int flag = 1;//此时定义一个flag标记,表示假设i是素数
- for (j = 2; j <= sqrt(i); j++)
- //假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
- {
- if (i % j == 0)
- {
- flag = 0;
- break;
- }
- }
- //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
- if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
- {
- count++;
- printf("%d ", i);//打印素数
- }
- }
- printf("\ncount = %d\n", count);//所有素数求出来之后,打印素数的个数
- return 0;
- }