12.29练习总结

2023-11-20

 第一题:迷宫


题目描述



给定一个N×M 方格的迷宫,迷宫里有 T处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案

输入格式



第一行为三个正整数 N,M,TN,M,T,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 SX,SY,FX,FYSX,SY,FX,FY,SX,SYSX,SY 代表起点坐标,FX,FYFX,FY 代表终点坐标。

接下来 TT 行,每行两个正整数,表示障碍点的坐标。

 输出格式



输出从起点坐标到终点坐标的方案总数。

 输入 



2 2 1
1 1 2 2
1 2

 输出 


1

 说明/提示


对于 100\%100% 的数据,1 \le N,M \le 51≤N,M≤5,1 \le T \le 101≤T≤10,1 \le SX,FX \le n1≤SX,FX≤n,1 \le SY,FY \le m1≤SY,FY≤m。

分析


此题我们需要使用深度搜索,首先我们先用一个二维数组来储存这个迷宫刚开始的时候起点在(sx,sy)处,让其一次一次的尝试按照顺时针的顺序(右,下,左,上),每成功一次,计数器加一。要判断是否到了终点,就只需要判断当前坐标和终点坐标是否相等,若没有在终点,就上下左右找,通过tx,ty来存储当前坐标,再通过一个数组来记录经过的点是否在路径中(避免重复访问与是否越界,是否遇到障碍物),若均无则继续进行拓展。

 代码如下:

#include<stdio.h>
int sum=0;
int N,M,T;
int sx,sy,fx,fy;
int a[100][100]={0},b[100][100];
void dfs(int x,int y,int step)
{
    int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
    int tx,ty,k;
    if(x==fx&&y==fy)
    {
        sum++;
        return ;
    }
    for(k=0;k<=3;k++)
    {
        tx=x+next[k][0];
        ty=y+next[k][1];
        if(tx<1||tx>N||ty<1||ty>M)
        {
            continue;
        }
        if(a[tx][ty]==0&&b[tx][ty]==0)
        {
            b[tx][ty]=1;
            dfs(tx,ty,step+1);
            b[tx][ty]=0;
        }
    }
    return ;
}
int main()
{
    int i;
    scanf("%d %d %d",&N,&M,&T);
    scanf("%d %d",&sx,&sy);
    scanf("%d %d",&fx,&fy);
    int fc,fd;
    for(i=1;i<=T;i++)
    {
        scanf("%d %d",&fc,&fd);
        a[fc][fd]=1;
    }
    b[sx][sy]=1;
    dfs(sx,sy,0);
    printf("%d",sum);
    return 0;
}

 第二题:小叶子学英文


题目描述


小叶子现有一个非负整数n,它的任务是计算 n 的各位数的和 , 并且按英语输出总和中的每一个数字。

输入


每次一个整数n,n<=10^100

输出


按要求输出。

样例输入 


12345

样例输出 


one five

 分析


由于数据太大,所以不能用数组需要用字符数组来记录数据,然后再将该数的各个部分相加,再利用一个数组将和的各个数字存起来,然后利用switch循环结构,可输出答案。

 代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    char n[100];
    scanf("%s",n);
    long long a[1000],l,i,j,sum=0;
    l=strlen(n);
    for(i=0; i<l; i++)
    {
        sum+=(n[i]-48);
    }
    for(i=0;i<l;i++)
    {
        a[i]=sum%10;
        sum=sum/10;
        if(sum==0)
        {
            break;
        }
    }
    for(j=i; j>=0; j--)
    {
        switch(a[j])
        {
        case 1:
            printf("one ");
            break;
        case 2:
            printf("two ");
            break;
        case 4:
            printf("four ");
            break;
        case 5:
            printf("five ");
            break;
        case 6:
            printf("six ");
            break;
        case 7:
            printf("seven ");
            break;
        case 8:
            printf("eight ");
            break;
        case 9:
            printf("nine ");
            break;
        case 0:
            printf("zero ");
            break;
        }
    }
    return 0;
}

 第三题:ICPC Fighting!

题目描述


在ICPC比赛中,气球的分配方式如下。

每当一个团队解决了一个问题,该团队就得到一个气球。
第一个解决一个问题的队伍可以得到一个额外的气球。
一场比赛有26个问题,标记为A,B,C,...,Z。你会得到比赛中已解决的问题的顺序,用字符串s表示,其中第i个字符表示问题s[i]已经被某个团队解决。没有团队会两次解决同一个问题。
确定各队收到的气球总数。请注意,有些问题可能没有被任何一个团队所解决。

输入


输入的第一行包含一个整数t(1≤t≤100)--测试用例的数量。

每个测试用例的第一行包含一个整数n(1≤n≤50)--字符串的长度。

每个测试案例的第二行包含一个长度为n的字符串s,由大写英文字母组成,表示已解决问题的顺序。

输出


对于每个测试案例,输出一个整数--各队收到的气球总数。

样例输入 


4
3
ABA
1
A
3
ORZ
5
BAAAA

样例输出 


5
2
6
7

 分析


其实经过分析就是计算字符串的个数+不同字符的数量就行了。当然也可以按题目的思路一步一步走计算每个团队的得分来得出答案。

 代码如下:

#include<stdio.h>
int n;
char a[51];

int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%s", &n, a);
        int ans=0, vis[26]= {0};
        for(int i=0; i<n; i++)
        {
            if(!vis[a[i]-'A'])
            {
                ans += 2, vis[a[i]-'A']=1;
            }
            else ans++;
        }
        printf("%d\n", ans);
    }
    return 0;
}

 第四题:斐波那契数列

题目描述


编写一个求斐波那契数列的递归函数,输入n值,使用该递归函数,输出如样例输出的斐波那契数列。

输入


一个整型数n

输出


题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应的斐波那契图形。

样例输入 


6

样例输出 


0
0 1 1
0 1 1 2 3
0 1 1 2 3 5 8
0 1 1 2 3 5 8 13 21
0 1 1 2 3 5 8 13 21 34 55

 分析


此题需要使用递归,然后知道斐波那契数列的规律就很好解了 。

 代码如下:

#include<stdio.h>
int fib(int x)
{
    if(x==0)
    {
        return 0;
    }
    else if(x==1)
    {
        return 1;
    }
    else
    {
        return fib(x-1)+fib(x-2);
    }
}
int main()
{
    int n,i,j;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<2*i+1;j++)
            {
                j<2*i?printf("%d ",fib(j)):printf("%d\n",fib(j));
            }
        }
    }
    return 0;
}

 第五题: 谁拿了最多奖学金(JSU-ZJJ)

题目描述


某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

  1)  院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;

  2)  五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;

  3)  成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;

  4)  西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;

  5)  班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;

  只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

  现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

输入


每组测试数据的输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。

输出


输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。

样例输入 


4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1

样例输出 


ChenRuiyi
9000
28700

 分析


本题使用结构体解决会简单些,建立一个结构体数组来记录多个学生的名字等各种成绩,然后再通过各种条件来计算总奖学金,再进行比较,找出奖学金最高的一位。

其次需要注意的是:第一,多组输入。第二,奖学金啥的不要忘了初始化。

 代码如下:

#include<stdio.h>
struct student
{
    char name[20];
    int a;//期末平均
    int b;//班级评议
    char c;//是否为学生会干部;
    char d;//西部
    int e;//论文数
    int sum;//奖金总数
} s[100],t;
int main()
{
    int n,i,sum1=0,j;
    while(~scanf("%d",&n))
    {
        sum1=0;
        for(i=0; i<n; i++)
        {
            scanf("%s %d %d %c %c %d",s[i].name,&s[i].a,&s[i].b,&s[i].c,&s[i].d,&s[i].e);
        }
        for(i=0; i<n; i++)
        {
            s[i].sum=0;
        }
        for(i=0; i<n; i++)
        {
            if(s[i].a>80&&s[i].e>=1)
            {
                s[i].sum=s[i].sum+8000;//院士奖学金
            }
            if(s[i].a>85&&s[i].b>80)//五四奖学金
            {
                s[i].sum=s[i].sum+4000;
            }
            if(s[i].a>90)//成绩优秀奖
            {
                s[i].sum+=2000;
            }
            if(s[i].a>85&&s[i].d=='Y')
            {
                s[i].sum+=1000;
            }
            if(s[i].b>80&&s[i].c=='Y')
            {
                s[i].sum+=850;
            }
            sum1=s[i].sum+sum1;
        }
        int q=0;
        for(i=0; i<n; i++)
        {
            if(s[i].sum>s[q].sum)
            {
                q=i;
            }
        }
        printf("%s\n",s[q].name);
        printf("%d\n%d\n",s[q].sum,sum1);
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

12.29练习总结 的相关文章

随机推荐

  • Linux 上传删除文件命令

    rm 文件名 删除 rz Enter 上传文件 Ctrl z 退出
  • 枚举基础问题

    枚举问题 与7无关的数为例 枚举问题 这类问题并不复杂 对于题目本身只需要通过循环去遍历 列举出所有可能满足条件的情况 一个一个罗列出来 称为枚举问题 例如下面的题目 与7无关的数 这就是一类枚举问题 将所有可能满足 与7无关的数 罗列出来
  • POC - Adobe ColdFusion 反序列化漏洞(CVE-2017-3066)

    安装010Editer 下载链接 http www pc6 com softview SoftView 55129 html 复制POC的十六进制 00 03 00 00 00 01 00 00 00 00 00 00 00 01 11 0
  • html制作简单的表单<form>

    文章目录 一 使用到的标签用法介绍 1 演示标签代码 2 标签使用具体介绍 二 表单制作代码 三 结果显示 一 使用到的标签用法介绍 1 演示标签代码
  • 输出九九乘法表

    九九乘法表 尝试编写程序 输出九九乘法表 具体如下图所示 代码 include
  • redis服务器信息统计,Redis 返回关于 Redis 服务器的各种信息和统计数值 命令:INFO...

    INFO section 以一种易于解释 parse 且易于阅读的格式 返回关于 Redis 服务器的各种信息和统计数值 通过给定可选的参数 section 可以让命令只返回某一部分的信息 server 一般 Redis 服务器信息 包含以
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 解决火狐首次启动太慢的方法

    众所周知 火狐浏览器有一定的优越性 现在众多的网站都采用了jquery技术 而ie在加载jquery上效果实在太差 尤其是配置稍低的情况下 ie很容易被卡死 这就体现出了火狐的优势 但火狐唯一不足的就是第一次启动的速度非常的慢 下面就是解决
  • 世界芯中国芯RISC-V相关资源及进展

    目录 1 RISC V介绍 RISC V为何会在最近两年迅速崛起 RISC V处理器生态 RISC V商业模式 2 RISC V发展历程 3 RISC V国际协会 4 中国RISC V产业联盟 5 RISC V相关资源 1 指令集规范 2
  • kotlin 之于 java 的差异

    一 变量声名 赋值和访问 kotlin 变量是空安全的 一般要求声明时就赋值 声名变量有两个关键字var和val 其中val相当于 java 的中的final 变量类型可显式给出 也可隐式推断 变量也可分可空类型和非空类型 以下给出几种声名
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • Altium Designer 20 常见错误

    记录学习过程中出现的错误及解决方法 1 off grid pin问题和Off grid Net Label问题 Off grid Net Label问题解决 只需要选中出现警告的元件 然后按A再按G即可 或者按Shift Ctrl D也行
  • 【网络通信】TCP网络编程

    TCP网络编程 一 面向连接的TCP流模式 二 server程序 三 client程序 四 相关文章 1 TCP网络编程 2 sockaddr和sockaddr in详解 3 socket编程为什么需要htons ntohl ntohs h
  • huggingfacer QuestionAnswerig问答模型调用方式

    huggingface网站提供了大量深度学习预训练模型及其调用方式 本文主要介绍问答模型调用方式 主要是针对问答结果输出完整上下文的问题 其现象在于问题答案为输入的上下文 而不是答案部分 出现该问题主要原因是transformers版本过低
  • Linux流行的发行版本

    Linux是一种广泛使用的自由开源操作系统 具有高度的可定制性 可靠性和安全性 在Linux世界中 存在着许多流行的发行版本 这些版本针对不同的用户需求和技能水平提供了不同的特性和功能 下面将介绍几个流行的Linux发行版本 一 Ubunt
  • 独家解读丨2019,技术传播去向何方?

    如果您是 Technical writer 关于2019年技术传播的发展一定有独到见解 欢迎拉到文末参加有奖活动 小编说 三年一晃而过 The Content Wrangler 再度重磅发布2019技术传播基准调研报告 今天小编要带大家好好
  • 替换JSONObject某个对象的值

    有时候我们只想替换JSONObject某个对象的值 不想把所有对象的值都列出来 那就用for循环把所有的值重新赋值一遍 再单独给需要赋值的对象重新赋值 JSONObject itemObject new JSONObject sJson S
  • 已解决 Request execution error. endpoint=DefaultEndpoint{ serviceUrl=‘http://localhost:8761/eureka/}

    Requestexecutionerror endpoint DefaultEndpoint serviceUrl http localhost 8761 eureka 注册中心报错 问题原因 可能就是yml文件有一步写错了然后照成报错 报
  • 多线程中如何去保证线程安全

    http www cnblogs com qingche p 5695743 html 一 前言 前段时间看了几个开源项目 发现他们保持线程同步的方式各不相同 有 synchronized NSLock dispatch semaphore
  • 12.29练习总结

    第一题 迷宫 题目描述 给定一个N M 方格的迷宫 迷宫里有 T处障碍 障碍处不可通过 在迷宫中移动有上下左右四种方式 每次只能移动一个方格 数据保证起点上没有障碍 给定起点坐标和终点坐标 每个方格最多经过一次 问有多少种从起点坐标到终点坐