洛谷刷题(7)

2024-09-03 04:44
文章标签 刷题 洛谷

本文主要是介绍洛谷刷题(7),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P8738 [蓝桥杯 2020 国 C] 天干地支

题目描述

古代中国使用天干地支来记录当前的年份。

天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊 (wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。

地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、未(wèi)、申(shēn)、酉(yǒu)、戌(xū)、亥(hài)。

将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。2020 年是庚子年。

每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。

每过 60 年,天干会循环 6 轮,地支会循环 5 轮,所以天干地支纪年每 60年轮回一次。例如 1900 年,1960 年,2020 年都是庚子年。

给定一个公元纪年的年份,请输出这一年的天干地支年份。

输入格式

输入一行包含一个正整数,表示公元年份。

输出格式

输出一个拼音,表示天干地支的年份,天干和地支都用小写拼音表示(不表示声调),之间不要加入任何多余的字符。

代码

#include<iostream>  
using namespace std;  // 定义天干和地支的数组  
string a[10] = { "jia","yi","bing","ding","wu","ji","geng","xin","ren","gui" }; // 天干  
string b[12] = { "zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai" }; // 地支  int main() {  int n; // 用户输入的年份  scanf("%d", &n); // 读取用户输入的年份  // 将年份调整到2020年的六十甲子循环中  while (n > 2020) {  n -= 60; // 如果年份大于2020,则减去60,回到上一个循环周期  }  while (n < 2020) {  n += 60; // 如果年份小于2020,则加上60,进入下一个循环周期  }  int x = 6, y = 0; // 初始化天干和地支的索引,2020年是庚子年,对应天干索引6(geng),地支索引0(zi)  // 从2021年开始,计算到用户输入的年份n的天干地支  for (int i = 2021; i <= n; i++) {  x++; // 天干索引递增  if (x == 10) x = 0; // 如果天干索引达到10(即最后一个天干),则重置为0  y = (y + 1) % 12; // 地支索引递增,并取模12保证索引在0到11之间循环  }  // 输出计算得到的天干地支  cout << a[x] << b[y];  return 0;  
}

P1011 [NOIP1998 提高组] 车站

题目描述

火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第 n−1 站),都满足此规律。现给出的条件是:共有 n 个车站,始发站上车的人数为 a,最后一站下车的人数是 m(全部下车)。试问 x 站开出时车上的人数是多少?

输入格式

输入只有一行四个整数,分别表示始发站上车人数 a,车站数 n,终点站下车人数 m 和所求的站点编号 x。

输出格式

输出一行一个整数表示答案:从 x 站开出时车上的人数。

代码

#include<stdio.h>
int f[20], g[20];
int  main() {int a, n, m, x, ans;scanf("%d%d%d%d", &a, &n, &m, &x);ans = a;if (x >= 3)ans += a;if (x >= 4) {f[1] = f[2] = 1;for (int i = 3; i <= n - 4; i++)f[i] = f[i - 1] + f[i - 2];for (int i = 1; i <= n - 4; i++)g[i] = g[i - 1] + f[i];int y = (m - g[n - 5] * a - ans) / g[n - 4];ans += g[x - 4] * a + g[x - 3] * y;}printf("%d\n", ans);return 0;
}

P1067 [NOIP2009 普及组] 多项式输出

题目描述

一元 nn 次多项式可用如下的表达式表示:

其中,称为 i 次项,称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

  1. 多项式中自变量为 x,从左到右按照次数递减顺序给出多项式。

  2. 多项式中只包含系数不为 0 的项。

  3. 如果多项式 n 次项系数为正,则多项式开头不出 + 号,如果多项式 n 次项系数为负,则多项式以 - 号开头。

  4. 对于不是最高次的项,以 + 号或者 - 号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 次的项,其系数的绝对值为 1,则无需输出 1)。如果 x 的指数大于 1,则接下来紧跟的指数部分的形式为“xb”,其中 b 为 x 的指数;如果 x 的指数为 1,则接下来紧跟的指数部分形式为 x;如果 x 的指数为 0,则仅需输出系数即可。

  5. 多项式中,多项式的开头、结尾不含多余的空格。

输入格式

输入共有 2 行

第一行 1 个整数,n,表示一元多项式的次数。

第二行有 n+1 个整数,其中第 i 个整数表示第 n−i+1 次项的系数,每两个整数之间用空格隔开。

输出格式

输出共 1 行,按题目所述格式输出多项式。

代码

#include<stdio.h>int main() {int n, m[200];scanf("%d", &n);for (int i = 1; i <= n + 1; i++) {scanf("%d", &m[i]);}int f = 0;for (int i = 1; i <= n - 1; i++) {if (m[i] == 0)continue;if (m[i] > 0) {if (f == 0) {f = 1;if (m[i] == 1)printf("x^%d", n - i + 1);else printf("%dx^%d", m[i], n - i + 1);continue;}if (m[i] == 1)printf("+x^%d", n - i + 1);else printf("+%dx^%d", m[i], n - i + 1);}else {if (f == 0) {f = 1;if (m[i] == -1)printf("-x^%d", n - i + 1);else printf("%dx^%d", m[i], n - i + 1);continue;}if (m[i] == -1)printf("-x^%d", n - i + 1);else printf("%dx^%d", m[i], n - i + 1);}}if (n > 0) {if (m[n] == 1) printf("+x");else if (m[n] == -1)printf("-x");if (m[n] != 0 && m[n] != 1 && m[n] != -1) {if (m[n] > 0)printf("+%dx", m[n]);else printf("%dx", m[n]);}}if (m[n + 1] > 0) {if (n == 0)printf("%d", m[n + 1]);elseprintf("+%d", m[n + 1]);}if (m[n + 1] < 0)printf("%d", m[n + 1]);return 0;
}

P1563 [NOIP2016 提高组] 玩具谜题

题目背景

NOIP2016 提高组 D1T1

题目描述

小南有一套可爱的玩具小人,它们各有不同的职业。

有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:

这时 singer 告诉小南一个谜题:“眼镜藏在我左数第 3 个玩具小人的右数第 1 个玩具小人的左数第 2 个玩具小人那里。”

小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向。

小南一边艰难地辨认着玩具小人,一边数着:

singer 朝内,左数第 3 个是 archer。

archer 朝外,右数第 1 个是 thinker。

thinker 朝外,左数第 2 个是 writer。

所以眼镜藏在 writer 这里!

虽然成功找回了眼镜,但小南并没有放心。如果下次有更多的玩具小人藏他的眼镜,或是谜题的长度更长,他可能就无法找到眼镜了。所以小南希望你写程序帮他解决类似的谜题。这样的谜題具体可以描述为:

有 n 个玩具小人围成一圈,已知它们的职业和朝向。现在第 1 个玩具小人告诉小南一个包含 m 条指令的谜題,其中第 zz 条指令形如“向左数/右数第 s 个玩具小人”。你需要输出依次数完这些指令后,到达的玩具小人的职业。

输入格式

输入的第一行包含两个正整数 n,m,表示玩具小人的个数和指令的条数。

接下来 n 行,每行包含一个整数和一个字符串,以逆时针为顺序给出每个玩具小人的朝向和职业。其中 0 表示朝向圈内,1 表示朝向圈外。保证不会出现其他的数。字符串长度不超过 10 且仅由英文字母构成,字符串不为空,并且字符串两两不同。整数和字符串之间用一个空格隔开。

接下来 m 行,其中第 i 行包含两个整数 ai,si 表示第 i 条指令。若 ai=0,表示向左数 si​ 个人;若  ai​=1,表示向右数 si​ 个人。 保证 aiai​ 不会出现其他的数,1≤si<n。

输出格式

输出一个字符串,表示从第一个读入的小人开始,依次数完 mm 条指令后到达的小人的职业。

代码

#include<stdio.h>
struct date {int number;char name[30];
}a[100005];
int n, m, b, c;
int main() {scanf("%d%d", &n, &m);for (int i = 0; i < n; i++) {scanf("%d %s", &a[i].number, a[i].name);}int p = 0;while(m--) {scanf("%d%d", &b, &c);	if ((a[p].number == 0 && b == 0) || (a[p].number == 1 && b == 1)) {//下标减减p = (p + n - c) % n;}else {p = (p + c) % n;}}printf("%s", a[p].name);return 0;
}

P8845 [传智杯 #4 初赛] 小卡和质数

题目背景

小卡最近迷上了质数,所以他想到了一个和质数有关的问题来考考你。

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

题目描述

小卡有 T(1≤T≤105) 组询问。每次询问给你两个正整数 x,y(1≤x,y≤109)。

小卡想知道,第 x 个质数和第 yy 个质数是否满足 px⊕py=1,即第 x 个质数和第 y 个质数的异或值是否是1。

输入格式

第一行一个正整数 T,表示询问的数量。

接下来 T 行,每行两个正整数 x,y 表示询问的是第 x 个质数和第 y 个质数。

输出格式

T 行,每行一个字符串YesNo,分别表示两个质数的异或值是 1 或不是 1。

代码

#include<stdio.h>int main() {int n;scanf("%d", &n);int a, b;while (n--) {scanf("%d%d", &a, &b);if (a == 1 && b == 2)printf("Yes\n");else if(a==2&&b==1)printf("Yes\n");else printf("No\n");}return 0;
}

这篇关于洛谷刷题(7)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132061

相关文章

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

【笔记】数据结构刷题09

快速排序 215. 数组中的第K个最大元素 class Solution {public:int findKthLargest(vector<int>& nums, int k) {return divide(nums,0,nums.size()-1,nums.size()-k);}int divide(vector<int>& nums,int left,int right,int k)

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数,其值不超过1000。如果n是非负整数,则该函数必须在一行中打印出n!的值,否则打印“Invalid input”。 首先,知道阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。那么我们先来个简单的阶乘计算吧。 #include<stdio.h>int Fact(int n){if (n <=

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

【每日刷题】Day112

【每日刷题】Day112 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 2. 面试题 08.01. 三步问题 - 力扣(LeetCode) 3. LCR 088. 使用最小花费爬楼梯 - 力扣(LeetCode) 1. 1137. 第 N 个泰波那契数 - 力扣(LeetCo