当前位置: 首页 > news >正文

牛客:小红的字符移动,小红的数轴移动,小红的圆移动

小红的字符移动

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include<iostream>
#include<string.h>
using namespace std;
int main(){char s[5];for(int i=0;i<5;i++){cin>>s[i];}cout<<s[1]<<s[0];for(int i=2;i<5;i++){cout<<s[i];}return 0;
}

代码思路

  1. 变量定义:char s[5];:定义了一个字符数组s,长度为 5,可以用来存储五个字符。

  2. 输入部分:for(int i = 0; i < 5; i++){ cin>>s[i]; }:通过循环从标准输入读取五个字符,依次存入字符数组s中。

  3. 输出部分

    • cout<<s[1]<<s[0];:先输出数组s中的第二个字符和第一个字符,实现了两个字符位置的交换。
    • for(int i = 2; i < 5; i++){ cout<<s[i]; }:接着通过循环输出数组s中从第三个字符到第五个字符。
  4. 返回值:return 0;:表示程序正常结束,返回值为 0。

小红的数轴移动

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include <iostream>
using namespace std;
int main() {int n, s;cin >> n >> s;long long cnt = 0;for (int i = 1; i <= n; ++i) {long long  x;cin >> x;if (s == 0)break;cnt += x;s += (s > 0? -x : x);}cout << cnt;return 0;
}

代码思路

该代码主要解决的问题是模拟小红在数轴上的移动过程,并计算其移动的总距离。通过循环读取每次移动的距离,并根据当前位置与原点的关系来更新位置和累加移动距离。

  1. 变量定义与输入读取:main函数中,首先定义了ns,分别用于存储操作次数和小红的初始位置。然后通过cin从标准输入读取这两个值。接着定义了cnt,用于累加小红移动的总距离,初始化为0

  2. 循环操作

    • 使用for循环从1n进行迭代,模拟n次操作。
    • 在每次循环中:
      • 首先读取一个整数x,它表示小红本次操作(如果移动)移动的距离。
      • 然后检查小红当前的位置s是否为0。如果s等于0,说明小红已经在原点,根据题目规则,此时原地不动,直接跳出循环,不再进行后续操作。
      • 如果s不为0,则需要更新小红的位置和累加移动距离。
        • 更新位置:根据题目,如果小红不在原点,她要朝着原点的方向移动x距离。如果s大于0(即小红在原点右侧),则s需要减去x(即s += -x);如果s小于0(即小红在原点左侧),则s需要加上x(即s += x)。
        • 累加距离:无论小红在原点左侧还是右侧移动,移动的距离x都要累加到总移动距离cnt中,即cnt += x
  3. 输出结果:循环结束后,cnt中存储的就是小红移动的总距离,最后通过cout将其输出。

  4. 注意点:cnt的数据类型为long long型数据,防止数据溢出

小红的圆移动

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
const double PI=3.1415926535;
double get(int x,int y){return 1.0*x*x+1.0*y*y;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,k;cin>>n>>k;vector<double>ans;for(int i=0;i<n;i++){int x,y,r;cin>>x>>y>>r;if(get(x,y)<1.0*r*r){double s=PI*r*r;double d=sqrt(get(x,y));double w=s*(r-d);ans.push_back(w);}}if(ans.size()<=k)cout<<0;else{sort(ans.begin(),ans.end());double res=0;for(int i=0;i<ans.size()-k;i++)res+=ans[i];printf("%.15lf",res);}return 0;
}

代码思路

小红对平面上的n个圆进行操作,使得最终包含原点的圆数量不超过k时的最小总代价。总代价是每个圆的面积乘以移动的距离,移动的距离是将不包含原点的圆移动到刚好不包含原点所需的距离。

  1. 头文件和常量定义:包含了<iostream><vector><math.h><algorithm>头文件,分别用于输入输出、动态数组、数学函数和排序算法。定义了常量PI表示圆周率。

  2. 自定义函数get

    • get函数接受两个参数xy,代表圆的圆心坐标。
    • 函数计算并返回圆心到原点的距离的平方,即1.0*x*x + 1.0*y*y
  3. main函数:

    • 输入部分:
      • 首先通过cin读取输入的两个正整数nk,分别代表圆的数量和最终包含原点的圆的最大数量。
      • 然后使用一个循环读取n个圆的信息,每个圆由三个整数xyr表示圆心坐标和半径。
    • 处理部分:对于每个圆,判断圆心到原点的距离的平方是否小于半径的平方,如果是,则说明该圆包含原点。对于不包含原点的圆,计算将其移动到刚好不包含原点的代价。
      • 最后计算该圆的移动代价w = s * (r - d),并将其存储在ans向量中。
      • 然后计算圆心到原点的距离d = sqrt(get(x, y))
      • 首先计算圆的面积s = PI * r * r
    • 输出部分:
      • 如果包含原点的圆的数量已经不超过k,则输出0,表示不需要进行任何操作。
      • 如果需要进行操作,对存储代价的ans向量进行排序,然后累加前ans.size() - k个元素,表示将这些不包含原点的圆移动到刚好不包含原点的总代价,并按照要求的精度输出。
  4. 计算圆心到原点的距离:使用勾股定理的原理,对于平面上的点(x, y),其到原点的距离为sqrt(x * x + y * y)
  5. 计算圆的面积:根据圆的面积公式S = πr²,其中r是圆的半径。
  6. 计算移动代价:对于不包含原点的圆,需要将其移动到刚好不包含原点的位置,移动的距离是半径减去圆心到原点的距离,即r - d,然后乘以圆的面积得到移动的代价。
  7. 排序和选择最小总代价:通过对所有不包含原点的圆的移动代价进行排序,选择最小的ans.size() - k个代价进行累加,得到最小总代价。这是因为要使包含原点的圆数量不超过k,就需要将多余的不包含原点的圆移动到刚好不包含原点的位置,选择最小的代价进行累加可以保证总代价最小。

http://www.mrgr.cn/news/44694.html

相关文章:

  • S7-200 SMAR Modbus RTU主站
  • ubuntu下vscode插件arm keil studio pack遇到的问题
  • 利士策分享,旅游是否要舟车劳顿才能尽兴?
  • 【查找算法概念】与【线性表的相关查找算法】
  • WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?
  • Vue2电商平台(五)、加入购物车,购物车页面
  • 黑马头条(10-1开始学习)
  • 【计算机网络 - 基础问题】每日 3 题(二十九)
  • 数据结构与算法笔记:概念与leetcode练习题
  • 手术器械检测系统源码分享
  • 如何给父母安排体检?
  • Cherno游戏引擎笔记(61~72)
  • jwt认证课件讲解
  • 2014/10/7 408 20题
  • C# 泛型编程基础:自定义泛型类、方法与接口的应用
  • pip丢了怎么办!不用怕,教你用get-pip.py来下载
  • Nacos
  • Vue基础练习|ref
  • 【微服务】springboot 实现动态修改接口返回值
  • Nacos 推送配置到本地的原理与新增、修改的区别详解