2.4日总结

第一题:选数

题解:思路还是很简单的,只需要想清楚dfs里的函数都是什么就可以了,还有一个简单的判断素数的函数,这题真没啥难度,就是属于基础题吧,请看AC代码

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <math.h>
int n,k,count;
int a[25];
int su(int n)
{
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            return 0;
        }
    }
    return 1;
}
void dfs(int t,int sum,int index)
{
    if(t==k)
    {
        if(su(sum)&&sum!=0)
        {
            count++;
        }
        return ;
    }
    int flag=sum;
    for(int i=index;i<n;i++)
    {
        sum=flag+a[i];
        dfs(t+1,sum,i+1);
    }
    return ;
}
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    dfs(0,0,0);
    printf("%d\n",count);
    return 0;
}

第二题:奇怪的电梯

题解:这题看到最少按几次按钮,直接BFS就可以,但是我们的判断条件,需要加上是否本来就在当前层,或者说,层数是否在合法范围

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

int n, a, b;
int p[501];
int book[501];
struct que
{
    int z;
    int step;
} q[1001];

int bfs()
{
    int hh=0,tt=1;
    int f=0;
    q[1].z=a;
    q[1].step=0;
    while(hh<tt)
    {
        hh++;
        for(int i=1;i<=2;i++)
        {
            if(i==1)
            {
                f=q[hh].z+p[q[hh].z];//下一层能走到哪
                if(f>0&&f<=n&&book[f]==0)
                {
                    book[f]=1;
                    tt++;
                    q[tt].z=f;
                    q[tt].step=q[hh].step+1;
                    if(f==b)
                    {
                        return q[tt].step;
                    }
                }
            }
            if(i==2)
            {
                f=q[hh].z-p[q[hh].z];//下一层能走到哪
                if(f>0&&f<=n&&book[f]==0)
                {
                    book[f]=1;
                    tt++;
                    q[tt].z=f;
                    q[tt].step=q[hh].step+1;
                    if(f==b)
                    {
                        return q[tt].step;
                    }
                }
            }
        }
    }
    return -1;
}
int main()
{
    scanf("%d%d%d", &n, &a, &b);
    if(a==b)
    {
          printf("0\n");
          return 0;
    }
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &p[i]);
    }
    int t = bfs();
    printf("%d\n", t);
    return 0;
}
相关推荐
坚持编程的菜鸟1 天前
模拟实现memmove
c语言·算法·模拟实现memmove
wabs6661 天前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟1 天前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou1 天前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh1 天前
百日算法修炼 · Day 03
java·算法
问商十三载1 天前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
嵌入式老牛1 天前
三相电气量采集模块设计(三)非同步采样时的精度提升
算法·精度·计量
今天AI了吗1 天前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
zephyr051 天前
从递归到迭代:二叉树非递归前中后序遍历详解
算法
Dr.kangder1 天前
嵌入式总线设备解析——TTE总线应用与实践
开发语言·网络·算法·嵌入式·多任务·同步机制