【c++百日刷题计划】 ———— DAY4,带你轻松学习算法

简介: 【c++百日刷题计划】 ———— DAY4,带你轻松学习算法

第一题【深基7.例4】歌唱比赛


题目描述


n ( n ≤ 100 )名同学参加歌唱比赛,并接受 m ( m ≤ 20 )名评委的评分,评分范围是 0到 10分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m − 2个评分的平均数。请问得分最高的同学分数是多少?评分保留 2位小数。


输入格式


第一行两个整数 n , m。

接下来 n行,每行各 m个整数,表示得分。


输出格式


输出分数最高的同学的分数,保留两位小数。


样例 #1


样例输入 #1


7 6
4 7 2 6 10 7
0 5 0 10 3 10
2 6 8 4 3 6
6 3 6 7 5 8
5 9 3 3 8 1
5 9 9 3 2 0
5 8 0 4 1 10


样例输出 #1


6.00


解题思路


1)记录单个人的成绩,进行排序和求和。

2)减去最大值和最小值,计算平均分。

3)和最大成绩比较,得到答案。


参考代码


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    double MAX=INT_MIN;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        double tmp[10001],sum=0;
        for(int j=1;j<=m;j++)
        {
            cin>>tmp[j];    
            sum+=tmp[j];
        }
        sort(tmp+1,tmp+m+1);
        sum=sum-tmp[1]-tmp[m];
        sum/=(m-2);
        if(sum>MAX) MAX=sum;
    }    
    printf("%.2f",MAX);
    return 0;   
}


第二题 求细胞数量


题目描述


一矩形阵列由数字 0到 9组成,数字 1 到 9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。


输入格式


第一行两个整数代表矩阵大小 n和 m。


接下来 n 行,每行一个长度为 m的只含字符 0 到 9 的字符串,代表这个 n × m 的矩阵。


输出格式


一行一个整数代表细胞个数。


样例 #1


样例输入 #1


4 10
0234500067
1034560500
2045600671
0000000089


样例输出 #1


4


提示


数据规模与约定


对于 100 % 的数据,保证 1 ≤ n , m ≤ 100。


解题思路


1)题目相当于求连通块的个数。

2)当遍历到非 0 元素时,进行深度优先搜索,将这个元素周围的非零元素全变成 0。连通块次数加一。

3)遍历到全是非 0 元素时,输出答案。


参考代码


#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[105][105];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int ans=0;
void dfs(int x,int y)
{
  if(a[x][y]=='0')return;
  a[x][y]='0';
  for(int i=0;i<4;i++)
  {
    int nx=x+dx[i];
    int ny=y+dy[i];
    if(nx<1||nx>n||ny<1||ny>m)
    {
      continue;
    }
    else
    {
      dfs(nx,ny);
    }
  }
}
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>a[i][j];
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      if(a[i][j]!='0')
      {
        ans++;
        dfs(i,j);
      }
    }
  }
  cout<<ans;
  return 0;
}


第三题 小A点菜


题目背景


uim 神犇拿到了 uoi 的 ra(镭牌)后,立刻拉着基友小 A 到了一家……餐馆,很低端的那种。


uim 指着墙上的价目表(太低级了没有菜单),说:“随便点”。


题目描述


不过 uim 由于买了一些书,口袋里只剩 M元 ( M ≤ 10000 ) 。


餐馆虽低端,但是菜品种类不少,有 N种 ( N ≤ 100 ),第 i 种卖 a i 元 ( a i ≤ 1000 )。由于是很低端的餐馆,所以每种菜只有一份。


小 A 奉行“不把钱吃光不罢休”,所以他点单一定刚好把 uim 身上所有钱花完。他想知道有多少种点菜方法。


由于小 A 肚子太饿,所以最多只能等待 1 秒。


输入格式


第一行是两个数字,表示 N  和 M。


第二行起 N 个正数 a i(可以有相同的数字,每个数字均在 1000  以内)。


输出格式


一个正整数,表示点菜方案数,保证答案的范围在 int 之内。


样例 #1


样例输入 #1


4 4
1 1 2 2


样例输出 #1


3


解题思路


1)简单的01背包问题。


参考代码


#include<bits/stdc++.h>
using namespace std;
int dp[10500];
int main()
{
  int N,M;
  cin>>N>>M;
  dp[0]=1;
  for(int i=1;i<=N;i++)
  {
    int a;
    cin>>a;
    for(int j=M;j>=a;j--)
    {
      dp[j]=dp[j]+dp[j-a];
    }
  }
  cout<<dp[M];
    return 0;
}


第四题 好奇怪的游戏


题目背景


《爱与愁的故事第三弹·shopping》娱乐章。


调调口味来道水题。


题目描述


爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点x1,y1和x2,y2上。它们得从点x1,y1和x2,y2走到1,1。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到1,1的最少步数,你能帮他解决这个问题么?


输入格式


第1行:两个整数x1,y1


第2行:两个整数x2,y2


输出格式


第1行:黑马到1,1的步数


第2行:白马到1,1的步数


样例 #1


样例输入 #1


12 16
18 10


样例输出 #1


8 
9


提示


100%数据:x1,y1,x2,y2<=20


解题思路


1)题目问的是最少步数,这里就能看出应该用广度优先搜索。

2)用结构体存储位置和步数,使用STL模板库中的<queue>。将起点入队。

3)循环取队头元素,队头位置能到达的点都依次入队并标记为以访问。

4)到达(1,1)退出循环,将标记访问的数组归零,广度优先搜索下一起点。


参考代码


#include<bits/stdc++.h>
using namespace std;
int x1,x2,yy1,yy2;
struct node{
  int x,y;
  int step;
}now,top;
int dx[12]={2,2,-2,-2,-1,-1,1,1,-2,-2,2,2};
int dy[12]={2,-2,2,-2,-2,2,-2,2,1,-1,1,-1};
int b[1000][1000];
queue<node> Q;
void bfs(int x,int y,int step)
{
  now.x=x;
  now.y=y;
  now.step=step;
  Q.push(now);
  while(!Q.empty()){
    top=Q.front();
    Q.pop();
    for(int i=0;i<12;i++)
    {
      int nx=top.x+dx[i];
      int ny=top.y+dy[i];
      if(nx>=1&&ny>=1&&nx<=50&&ny<=50&&b[nx][ny]==0)
      {
        now.x=nx;
        now.y=ny;
        now.step=top.step+1;
        Q.push(now);
        b[nx][ny]=1;
        if(nx==1&&ny==1)
        {
          cout<<now.step<<endl;
          return;
        }
      }
    }
  }
}
int main()
{
  cin>>x1>>yy1>>x2>>yy2;
  bfs(x1,yy1,0);
  memset(b,0,sizeof(b));
  while(!Q.empty())Q.pop();
  bfs(x2,yy2,0);
  return 0;
}

相关文章
|
23天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
23天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
23天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
23天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
30天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
7天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
15天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
16天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
17天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
下一篇
无影云桌面