趣味算法-读书笔记(三)

14天阅读挑战赛

流程控制

分支语句-if

可以写范围

#include <stdio.h>

int main() {
    int i = 20;
    if (i < 60) {
        if (i > 30) {
            printf("java");
        } else {
            printf("C++");
        }
    }
}

分支语句-switch

#include <stdio.h>

int main() {
    char i = 'B';
    switch (i) {
        case 'A':
        printf("C++");
        break;
        case 'B':
            printf("JAVa");
            break;
        case 'C':
            printf("python");
            break;
        default:
            printf("CCCC");
    }
}

循环语句for

#include <stdio.h>

int main() {
    for (int i = 0; i <4 ; ++i) {
        printf("what are you doing ?\n");
    }
}

if 和 for循环语句:

#include <stdio.h>

int main() {

    for (int i = 0; i < 4; ++i) {
        if (i == 3) break;
        printf("%d\n", i);
        
    }
}

在循环过程中提前终止和或是加速循环的进行:

比如我们现在希望在满足某个条件下提前终止循环,可以使用break关键字来跳出循环

使用continue关键字会加速循环,无论后面有没有未执行完的代码,都会直接开启下一轮

#include <stdio.h>

int main() {

    for (int i = 0; i < 10; ++i) {
        if (i == 5) continue;
        printf("%d", i);

    }
}

注意使用break和continue

#include <stdio.h>

int main() {

    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4 ; ++j) {

            printf("%d,%d\n", i, j);
        }
    }
}
 

循环语句while

相比for循环,while循环更多用在不明确具体的结束时机的情况下,而for循环更多用于明确知道循环的情况

#include <stdio.h>

int main() {
    int i = 100;
    while (i > 0) {
        printf("%d\n", i);
       i /=2;
    }

}

#include <stdio.h>

int main() {
    int i = 100;
    while (i > 0) {
        if(i < 30) break;
        printf("%d\n", i);
       i /=2;
    }

}

阶乘:

#include <stdio.h>

int main() {
    int i =3, res=1;
    for (int j = 0; j < 5; ++j) {
        res *= i;
        printf("%d\n",res);
    }

}

实战:寻找水仙花数

也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3+5^3+3^3=153。

打印出所有1000以内的水仙花数

#include <stdio.h>

int main() {
    for (int i = 0; i < 1000; ++i) {
        int a = i % 10, b = i / 10 % 10, c = i / 10 / 10;
        if (a * a * a + b * b * b + c * c * c == i) {
            printf("%d\n", i);
        }
    }
}

实战:打印九九乘法表

#include <stdio.h>

int main() {
    for (int i = 1; i < 10; ++i) {
        for (int j = 1; j < 10; ++j) {
            if(i < j) continue;
            printf("%d * %d = %d  ",i ,j ,i *j );
        }
        printf("\n");
    }
}

实战:斐波那契数列

#include <stdio.h>

int main() {
    int target = 10, result;
    int a = 1, b = 2, c;
    for (int i = 2; i < 10; ++i) {
        c = a + b;
        a = b;
        b = c;
    }
    result = c ;
    printf("%d  \n",  c );
}

数组

#include <stdio.h>

int main() {
    int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    for (int i = 0; i < 12 ; ++i) {
        int days = arr[i];
        printf("%2d : %d \n",(i + 1), days);
    }
}

#include <stdio.h>

int main() {
    int arr[12] = {[4]=31};
    for (int i = 0; i < 12 ; ++i) {
        int days = arr[i];
        printf("%2d : %d \n",(i + 1), days);
    }
}

#include <stdio.h>

int main() {
    int arr[12] = {999,111,222,333};
    arr[1]=1000;
    printf("%d",arr[1]);
}

数据替换

超出大于30的月份

#include <stdio.h>

int main() {
    int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    for (int i = 0; i < 12; ++i) {
        if(arr[i] > 30){
            printf("%d\n",i + 1);
        }
    }
}

将低于31天的修改为0

#include <stdio.h>

int main() {
    int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    for (int i = 0; i < 12; ++i) {
        if(arr[i] < 31 ) arr[i] = 0;
    }
    for (int i = 0; i < 12; ++i) {
        printf("%d,",arr[i]);
    }
}

多维数组

#include <stdio.h>

int main() {
    int arr[3][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
            { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
            { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }};
    printf("%d\n",arr[0][4]);
}

冒泡排序算法

#include <stdio.h>

int main() {
    int arr[10] = {2, 2, 43, 19, 5, 5, 6, 76, 7, 10};
    for (int i = 0; i < 10; ++i) {
        _Bool flag = 0;
        for (int j = 1; j < 10; ++j) {
            if (arr[j] < arr[j - 1]) {
                int tmp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = tmp;
                flag = 1;
            }
        }
        if (flag == 0) break;
    }
    for (int i = 0; i < 10; ++i) {
        printf("%d ", arr[i]);
    }
}

斐波那契数列

动态规划算法通常用于求解具有某种最优性质的问题

#include <stdio.h>

int main() {
    int target = 10;

    int dp[target];
dp[1] = dp[0] =1;
    for (int i = 2; i < target; ++i) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    printf("%d",dp[target - 1]);

}

备注:如有错误,请谅解!

此文章为本人学习笔记,仅供参考!如有重复!!!请联系本人

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风挽着浮云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值