上海网站建设咨询报价/自媒体运营主要做什么
目录
第一题:求最大公约数
第二题:求最大值和最小值
第三题:蜗牛矩阵
第一题:求最大公约数
💬 输入两个整数,求出这两个整数的最大公约数。
要求:
① 递归实现。
② 使用辗转相除法(欧几里得算法)
输出结果演示:
🔑 参考答案:
#include <stdio.h>void func_gcd(int a, int b, int* gcd);int main(void) {int n1 = 0;int n2 = 0;int res = 0;printf("Input first number: ");scanf("%d", &n1);printf("Input second number: ");scanf("%d", &n2);func_gcd(n1, n2, &res);printf("GCD: %d\n", res);return 0;
}void func_gcd(int a, int b, int* gcd) {/* 欧几里得算法:gcd(a,b) = gcd(b, a mod b) */if (0 == a % b) {*gcd = b;} else {int tmp = b;b = a % b;a = tmp; //tmp is bfunc_gcd(a, b, gcd);}
}
🚩 运行结果:
第二题:求最大值和最小值
💬 接收10个整数,按逆序打印出来。并输出它们的最大值和最小值。
输出结果演示:
🔑 参考答案:
#include <stdio.h>int main(void) {int arr[10] = {0};printf("Input 10 numbers: ");int i = 0;for (i = 0; i < 10; i++) {scanf("%d", &arr[i]);}for (i = 0; i < 10/2; i++) {int tmp = arr[i];arr[i] = arr[9 - i];arr[9 - i] = tmp;}for (i = 0; i < 10; i++) {printf("%d ", arr[i]);}printf("\n");// 找出最大值int max = arr[0]; // 假设第一个元素是最大的for (i = 0; i < 10; i++) {if (arr[i] > max) {max = arr[i];}}// 找出最小值int min = arr[0]; // 假设第一个元素是最小的for (i = 0; i < 10; i++) {if (arr[i] < min) {min = arr[i];}}printf("Max: %d, Min: %d\n", max, min);return 0;
}
🚩 运行结果:
第三题:蜗牛矩阵
💬 创建一个二维数组,利用数组来输出 "蜗牛矩阵 "。
接收一个 N 来表示矩阵的大小 ,输出
的蜗牛矩阵。
限制条件:禁止引用 stdio.h 以外的头文件。
蜗牛矩阵:数组大小以顺时针方向旋转绕到矩阵的中心,称为蜗牛矩阵。从内到外依次增大,如图所示:
输出结果演示:
🔑 参考答案:
#include <stdio.h>void func(int arr[20][20], int n);
void print_arr(int arr[20][20], int n);int main(void) {int arr[20][20];int N = 0;
jump:printf("Input N: ");scanf("%d", &N);if (N > 20 || N < 1) {printf("N's range: 1 ≤ N ≤ 20\n");goto jump;}func(arr, N);print_arr(arr, N);return 0;
}void func(int arr[20][20], int n) {int X[4] = {0, 1, 0, -1};int Y[4] = {1, 0, -1, 0};int d = 0;int x = 0;int y = 0;int nx = 0;int ny = 0;int i = 0;int j = 0;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {arr[i][j] = -1;}}for (i = 1; i <= n*n; i++) {arr[x][y] = i;nx = x + X[d];ny = y + Y[d];if ((nx == -1 || nx == n) || (ny == -1 || ny == n) || arr[nx][ny] != -1) {d++;d = d % 4;}x += X[d];y += Y[d];}
}void print_arr(int arr[20][20], int n) {int i = 0;int j = 0;for (i = 0; i < n; i++) {for (j = 0; j < n; j++) {printf("%5d", arr[i][j]);}printf("\n");}
}
🚩 运行结果:
参考资料:
Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .
百度百科[EB/OL]. []. https://baike.baidu.com/.
📌 笔者:王亦优
📃 更新: 2021.12.13
❌ 勘误: 无
📜 声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正