【算法笔记自学】入门篇(1)——入门模拟

3.1简单模拟

自己写的题解

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int N;
    int num=0;
    scanf("%d",&N);
    while(N!=1)
    {
        if(N%2==0)
        {
        N=N/2;
        }
        else
        {
        N=(3*N+1)/2;
        }
        num++;
    }
    printf("%d",num);
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

标答

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n,step=0;
    scanf("%d",&n);
    while(n!=1)
    {
        if(n%2==0)n=n/2;
        else n=(3*n+1)/2;
        step++;
    }
    printf("%d\n",step);
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

3.2查找元素

自己写的题解

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n;
    int f=0;
    int a[100000];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);

    }
    scanf("%d",&f);
    int find=-1;
    for(int i=0;i<n;i++)
    {
        if(a[i]==f)
        {
            find=i+1;
        }

    }
    if(find!=-1)
    printf("%d\n",find);
    else
    printf("NO");
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

标答

cpp 复制代码
#include <cstdio>
const int MAXN = 20;
int a[MAXN];
int main() {
    int n, x;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int position = -1;              // 待查找元素的下标,-1表示找不到
    scanf("%d", &x);
    for (int i = 0; i < n; i++) {   // 遍历序列
        if (a[i] == x) {            // 如果当前元素就是待查找的元素
            position = i + 1;       // 记录下标,注意要加1
            break;                  // 不需要继续查找了,退出循环
        }
    }
    if (position == -1) {           // 如果找不到
        printf("NO");               // 输出NO
    } else {                        // 如果能找到
        printf("%d", position);     // 输出对应的下标
    }
    return 0;
}

3.3图形输出

自己写的题解

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int row=0;
    scanf("%d",&row);
    int col=row;
    for(int i=0;i<row-1;i++)
    {
        printf("*");
        for(int j=0;j<i+1;j++)
        {
            if(i==j&&j!=0)
            {
                printf("*");
            }
            else if(j!=0)
            printf(" ");

        }
        printf("\n");
    }
    for(int i=0;i<row;i++)
    {
        printf("*");
    }
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

标答1

cpp 复制代码
#include <cstdio>

int main() {
    int n;
    scanf("%d", &n);
    printf("*\n");
    for (int i = 0; i < n - 2; i++) {
        printf("*");
        for (int j = 1; j <= i; j++) {
            printf(" ");
        }
        printf("*\n");
    }
    for (int i = 0; i < n; i++) {
        printf("*");
    }
    return 0;
}

标答2

cpp 复制代码
#include <cstdio>
#include <cstring>
const int MAXN = 100;
char s[MAXN][MAXN + 1];

int main() {
    int n;
    scanf("%d", &n);
    memset(s, ' ', sizeof(s));
    for (int i = 0; i < n - 1; i++) {
        s[i][0] = s[i][i] = '*';
        s[i][i + 1] = '\0';
        printf("%s\n", s[i]);
    }
    for (int i = 0; i < n; i++) {
        printf("*");
    }
    return 0;
}

3.4日期处理

标答

cpp 复制代码
#include <cstdio>

bool isLeapYear(int year) {
    return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}

int main() {
    int year;
    scanf("%d", &year);
    printf(isLeapYear(year) ? "YES" : "NO");
    return 0;
}

标答

cpp 复制代码
#include <cstdio>
// 每个月的天数
int dayOfMonth[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
// 是否是闰年
bool isLeapYear(int year) {
    return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
// 给当前日期加1天(注意参数都用了引用&,这样对参数的修改可以同步到函数外)
void addOneDay(int &year, int &month, int &day) {
    day++;                    // 让day加1
    if (day > dayOfMonth[isLeapYear(year)][month]) {  // 如果超过当前月的天数
        month++;              // 让month加1
        day = 1;              // 重置day为1号
    }
    if (month > 12) {         // 如果月份大于12
        year++;               // 让year加1
        month = 1;            // 重置month为1月
    }
}

int main() {
    int year, month, day, n;
    scanf("%d-%d-%d", &year, &month, &day);       // 按格式输入年月日
    scanf("%d", &n);                              // 输入需要增加的天数
    for (int i = 0; i < n; i++) {                 // 遍历n次,每次加1天
        addOneDay(year, month, day);
    }
    printf("%04d-%02d-%02d", year, month, day);   // 按格式输出年月日
    return 0;
}

3.5进制转换

自己写的题解

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int y=0;
    scanf("%d",&y);
    int z[40],num=0;
    do{
        z[num++]=y%2;
        y=y/2;
    }while(y!=0);
   for(int i=num-1;i>=0;i--)
   {
    printf("%d",z[i]);
   }
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

公式:将十进制数y转换为Q进制数z

cpp 复制代码
int z[40],num=0;
    do{
        z[num++]=y%Q;
        y=y/Q;
    }while(y!=0);

自己写的题解

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
int main() {
    int y=0,product=1;
    int x=0;
    scanf("%d",&x);
    while(x!=0){
        y=y+(x%10)*product;
        x=x/10;
        product=product*2;
    }
    printf("%d",y);
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

公式:将P进制数x转换为十进制数y

cpp 复制代码
int y=0,product=1;
    while(x!=0){
        y=y+(x%10)*product;
        x=x/10;
        product=product*P;
    }

3.6字符串处理

标答

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int maxn=50;
int judge(char str[]){
    int len=strlen(str);
    for(int i=0;i<len/2;i++){
        if(str[i]!=str[len-1-i]){
            return 0;
        }
    }
    return 1;
}
int main() {
    char str[maxn];
    while(scanf("%s",str)!=EOF)
    {
        int flag=judge(str);
        if(flag==1){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    system("pause"); // 防止运行后自动退出,需头文件stdlib.h
    return 0;
}

标答

cpp 复制代码
#include <cstdio>

const int MAXN = 500;
const int MAXL = 11;
char str[MAXN][MAXL], num = 0;

int main() {
    while (scanf("%s", str[num]) != EOF) {
        num++;
    }
    for (int i = num - 1; i >= 0; i--) {
        printf("%s", str[i]);
        if (i > 0) {
            printf(" ");
        }
    }
    return 0;
}
相关推荐
积兆科技30 分钟前
从汽车企业案例看仓网规划的关键步骤(视频版)
人工智能·算法·汽车·制造
qq_430583971 小时前
QT笔记- QTreeView + QFileSystemModel 当前位置的保存与恢复 #选中 #保存当前索引
开发语言·笔记·qt
Lenyiin1 小时前
01.01、判定字符是否唯一
算法·哈希算法
小王爱吃月亮糖1 小时前
QT-QVariant类应用
开发语言·c++·笔记·qt·visual studio
闻缺陷则喜何志丹1 小时前
【C++动态规划】1458. 两个子序列的最大点积|1823
c++·算法·动态规划·力扣·最大·子序列·点积
三万棵雪松1 小时前
3.系统学习-熵与决策树
学习·算法·决策树
红色的山茶花1 小时前
YOLOv9-0.1部分代码阅读笔记-hubconf.py
笔记·深度学习·yolo
无涯学徒19981 小时前
J9学习打卡笔记
笔记·学习
软茸兔1 小时前
笔记:一次oracle 集群日志维护
数据库·笔记·oracle
半盏茶香2 小时前
C语言勘破之路-最终篇 —— 预处理(上)
c语言·开发语言·数据结构·c++·算法