C基础算法与实现

前言

通过业务侧输入需求,使用代码完成。

1.偶数立方和

编写函数求1~100中奇数的平方与偶数的立方的和

1.1代码实现结果

1.2源码示例

cpp 复制代码
#include <stdio.h>

// 计算1到100中奇数的平方与偶数的立方的和
int calculateSum() {
    int sum = 0;
    // 遍历1到100之间的所有数字
    for (int i = 1; i <= 100; i++) {
        // 如果是奇数
        if (i % 2 == 1) {
            // 计算奇数的平方并累加到总和中
            sum += i * i;
        } else {
            // 计算偶数的立方并累加到总和中
            sum += i * i * i;
        }
    }
    // 返回计算结果
    return sum;
}

int main(int argc, const char *argv[])
{
    // 调用calculateSum函数并将结果存储在result变量中
    int result = calculateSum();
    // 输出结果
    printf("1到100中奇数的平方与偶数的立方的和为: %d\n", result);
    return 0;
}

2.买衣问钱

买一件上衣59元,买一件裤子70元,如果成套买的话,一套120.假设我买了m个上衣和n个裤子,问:需要花多少钱?

2.1代码实现结果

2.2源码示例

cpp 复制代码
#include <stdio.h>

int main(int argc, const char *argv[])
{
	
    int m, n; // m表示上衣的数量,n表示裤子的数量
    int cost = 0; // 初始化总花费为0

    printf("请输入上衣的数量: ");
    scanf("%d", &m);

    printf("请输入裤子的数量: ");
    scanf("%d", &n);

    // 计算成套购买的套数
    int sets = (m < n) ? m : n;

    // 计算成套购买的花费
    cost += sets * 120;

    // 计算单独购买上衣的花费
    if (m > sets) {
        cost += (m - sets) * 59;
    }

    // 计算单独购买裤子的花费
    if (n > sets) {
        cost += (n - sets) * 70;
    }

    printf("总共需要花费: %d元\n", cost);

    return 0;
}

3.打印倒金字塔

终端输入行数,打印倒金字塔

3.1代码实现结果

3.2源码示例

cpp 复制代码
#include <stdio.h>

int main(int argc, const char *argv[])
{
    int rows;
    // 提示用户输入行数
    printf("请输入行数: ");
    // 从用户输入中获取行数
    scanf("%d", &rows);

    // 外层循环控制行数
    for (int i = rows; i >= 1; i--) 
	   {
        // 内层循环控制空格的数量
        for (int j = 1; j <= rows - i; j++) 
		  {
            // 打印空格
            printf(" ");
        }
        // 内层循环控制星号的数量
        for (int k = 1; k <= 2 * i - 1; k++) 
		  {
            // 打印星号
            printf("*");
        }
        // 每行结束后换行
        printf("\n");
    }

    return 0;
}

4.异或算术

使用异或和算术求和交换两个数

4.1代码实现结果

4.2源码示例

cpp 复制代码
#include <stdio.h>
 
int main(int argc, const char *argv[])
{
    int a = 5;
    int b = 10;
 
    printf("B_swap: a = %d, b = %d\n", a, b);
 
    // 使用异或运算交换
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
 
    printf("A_swap: a = %d, b = %d\n", a, b);

    printf("------------------------------\n");

    // 使用算术求和交换
 	int x = 30;
    int y = 50;
 
    printf("B_swap1: a = %d, b = %d\n", x, y);
 
    x = x + y;
    y = x - y;
    x = x - y;
 
    printf("A_swap1: x = %d, y = %d\n", x, y);


    return 0;


}

5.固定数字不同且无重复

有 1、2、3、4个数字,能组成多少互不相同且无重复的三位?都是多少?

5.1代码实现结果

5.2源码示例

cpp 复制代码
#include <stdio.h>

int main(int argc, const char *argv[])
{
    // 初始化计数器
    int count = 0;
    // 定义一个包含4个数字的数组
    int digits[4] = {1, 2, 3, 4};

    // 外层循环遍历数组中的每个数字作为百位
    for (int i = 0; i < 4; i++) {
        // 中层循环遍历数组中的每个数字作为十位
        for (int j = 0; j < 4; j++) {
            // 内层循环遍历数组中的每个数字作为个位
            for (int k = 0; k < 4; k++) {
                // 检查百位、十位和个位数字是否不重复
                if (i != j && i != k && j != k) {
                    // 打印由这三个数字组成的三位数
                    printf("%d%d%d\n", digits[i], digits[j], digits[k]);
                    // 计数器加1
                    count++;
                }
            }
        }
    
   }
    // 打印生成的不重复三位数的总数
    printf("不重复有: %d\n", count);
    return 0;
}

6.求最大公约数和最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数

6.1代码实现效果

6.2源码示例

cpp 复制代码
#include <stdio.h>

// 函数声明
int gcd(int m, int n);
int lcm(int m, int n);

int main(int argc, const char *argv[])
{
    int m, n;

    // 输入两个正整数
    printf("请输入两个正整数 m 和 n: ");
    scanf("%d %d", &m, &n);

    // 计算并输出最大公约数
    int gcd_result = gcd(m, n);
    printf("最大公约数: %d\n", gcd_result);

    // 计算并输出最小公倍数
    int lcm_result = lcm(m, n);
    printf("最小公倍数: %d\n", lcm_result);

    return 0;
}

// 欧几里得算法求最大公约数
int gcd(int m, int n) 
	  {
    // 当n不为0时,继续循环
    while (n != 0) 
		{
        // 计算m除以n的余数
        int temp = m % n;
        // 将n赋值给m
        m = n;
        // 将余数赋值给n
        n = temp;
       }
    // 返回m,此时m为最大公约数
    return m;
}

// 利用最大公约数求最小公倍数
int lcm(int m, int n) {
    // 计算最小公倍数,公式为 (m * n) / gcd(m, n)
    return (m / gcd(m, n)) * n;
}

7.冒泡排序算法实例

终端输入10个学生成绩,使用冒泡排序对学生成绩从低到高排序

7.1代码实现结果

7.2源码示例

cpp 复制代码
#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) 
{
    // 外层循环控制排序趟数
    for (int i = 0; i < n - 1; i++)
	{
        // 内层循环控制每趟比较次数
        for (int j = 0; j < n - 1 - i; j++) 
		  {
            // 如果当前元素大于下一个元素,则交换它们
            if (arr[j] > arr[j + 1]) 
			  {
                // 交换相邻元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main(int argc, const char *argv[])
{
    int scores[10];
    printf("请输入10个学生成绩:\n");

    // 输入10个成绩
    for (int i = 0; i < 10; i++) {
        printf("学生 %d 成绩: ", i + 1);
        scanf("%d", &scores[i]);
    }

    // 使用冒泡排序对成绩进行排序
    bubbleSort(scores, 10);

    // 输出排序后的成绩
    printf("排序后的成绩(从低到高):\n");
    for (int i = 0; i < 10; i++) {
        printf("学生 %d 成绩: %d\n", i + 1, scores[i]);
    }

    return 0;
}

8.实现字符串的整体逆置

8.1代码实现结果

8.2源码示例

cpp 复制代码
#include <stdio.h>
#include <string.h>

int main(int argc, const char *argv[])
{
    char str[100];
    int i, j;
    char temp;

    // 提示用户输入一个字符串
    printf("请输入一个字符串: ");

    // 从标准输入读取字符串
    fgets(str, sizeof(str), stdin);

    // 去掉输入字符串末尾的换行符
    if (str[strlen(str) - 1] == '\n') 
	 {
        str[strlen(str) - 1] = '\0';
     }

    // 计算字符串长度
    int len = strlen(str);

    // 逆置字符串
    for (i = 0, j = len - 1; i < j; i++, j--) 
	  {
        // 交换字符
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
      }

    // 输出逆置后的字符串
    printf("逆置后的字符串: %s\n", str);

    return 0;
}
相关推荐
emmmmXxxy1 小时前
leetcode刷题-贪心03
算法·leetcode·职场和发展
、达西先生2 小时前
强化学习笔记——4策略迭代、值迭代、TD算法
算法·rl·sarsa·q-learning
Pakho love3 小时前
Linux:文件与fd(被打开的文件)
android·linux·c语言·c++
W说编程3 小时前
C语言指针专题四 -- 多级指针
c语言·开发语言·数据结构·c++·嵌入式硬件
我命由我123453 小时前
游戏引擎 Unity - Unity 下载与安装
c语言·开发语言·c++·后端·unity·c#·游戏引擎
h^hh4 小时前
向下调整算法(详解)c++
数据结构·c++·算法
我命由我123454 小时前
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
c语言·c++·后端·unity·c#·游戏引擎·ue4
能源革命4 小时前
负荷预测算法模型
算法·能源
海绵波波1074 小时前
350.两个数组的交集 ②
数据结构·算法·leetcode