天梯赛练习题(c语言)

1、L1-007 念数字 (10 分)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 读入一个数字
Scanner input = new Scanner(System.in);
int num = input.nextInt();
input.close();
// 判断是否是负数,并控制打印形式
if (num < 0) {
System.out.print(“fu” + " ");
// 负数要找到绝对值去读
int num_abs = Math.abs(num);
read(num_abs);
} else {
read(num);
}
}

/*** @Title: read @Description: 读数字 @param n 设定文件 @return void 返回类型 @throws*/
public static void read(int n) {
// 定义一个字符串数组,元素是从零到九的数字的拼音
String[] arr = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
int number = n;
// 将数字转换为字符串
String str = number + "";
// 定义最终要打印的字符串
String print = "";
// 遍历字符串
for (int index = 0; index < str.length(); index++) {// 从左往右取到每一个字符char c = str.charAt(index);// 用取到的字符减字符零,得到的 int 型数字就是数字本身// 用数字本身作为下标获取拼音int arr_index = c - '0';// concat(String s) 方法,把指定的字符串连接到这个字符串的末尾print = print.concat(arr[arr_index] + " ");
}
// trim() 方法,去掉字符串末尾的空格字符
System.out.println(print.trim());
}

}

2、L1-016 查验身份证 (15 分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
输入样例1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
输出样例1:
12010X198901011234
110108196711301866
37070419881216001X
输入样例2:
2
320124198808240056
110108196711301862
输出样例2:
All passed
// #include <stdio.h>
int main (){
int q[17] = {7, 9, 10, 5, 8, 4, 2, 1,6, 3, 7, 9, 10, 5, 8, 4, 2};
int idz[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char idm[12] = “10X98765432”;
int n, sum[101] = {0}, t[101] = {0};
char str[101][19];
scanf ("%d", &n);
for (int i=0; i<n; i++)
scanf ("%s", str[i]);
for (int i=0; i<n; i++){
int flag = 0;
for (int j=0; j<17; j++)
if (str[i][j]>=‘0’ && str[i][j]<=‘9’)
flag++;
if (flag==17){
for (int j=0; j<17; j++)
sum[i] += (str[i][j]-48)*q[j];
sum[i] %= 11;
if (str[i][17] != idm[sum[i]])
t[i] = 1;
}
else
t[i] = 1;
}
int count = 1, flag1 = 1;
for (int i=0; i<n; i++)
if (t[i]){
if (flag1){
printf ("%s", str[i]);
flag1 = 0;
}
else
printf ("\n%s", str[i]);
count = 0;
}
if (n)
if (count)
printf (“All passed\n”);
return 0;
}

3、L1-047 装睡 (10 分)
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。
输入格式:
输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。
输出格式:
按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。
输入样例:
4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71
输出样例:
Tom
Zoe
#include"stdio.h"
#include"stdlib.h"
int main()
{
int n;
int i;
char a[10][4];
int b[10],c[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",a[i]);
scanf("%d",&b[i]);
scanf("%d",&c[i]);
if(b[i]<15||b[i]>20)
printf("%s\n",a[i]);
else if(c[i]<50||c[i]>70)
printf("%s\n",a[i]);
}
return 0;
}

4、L1-056 猜数字 (20 分)
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:
输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:
7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62
输出样例:
22 Amy
#include<stdio.h>
#include<math.h>
struct prople{
int num;
int name[10];
}p[10000],pmin;//pmin表示最小值
int main (void)
{
int i,n,sum=0;
double half;//half表示平均数的一半
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d",p[i].name,&p[i].num);
sum=sum+p[i].num;
}
half=sum1.0/n0.5;
pmin=p[0];
for(i=0;i<n;i++)
{
if(fabs(pmin.num-half)>fabs(p[i].num-half))//最接近平均数的一半
pmin=p[i];
}
printf("%.0f %s",half,pmin.name);
return 0;
}
5、L1-070 吃火锅 (15 分)

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。
本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。
输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。
输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。
如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 --#。
输入样例 1:
Hello!
are you there?
wantta chi1 huo3 guo1?
that’s so li hai le
our story begins from chi1 huo3 guo1 le
.输出样例 1:
5
3 2
输入样例 2:
Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that’s so li hai le
our story begins from ci1 huo4 guo2 le
.输出样例 2:
5
-
-#
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[85];
int first_index=-1;//第一个符合的未知
int s_count=0;//总输入的个数
int t_count=0;//符合的个数
int main(){
while(1){
gets(str);//一次输入每一句话
if(strcmp(".",str)0)
break;
s_count++;//输入的全部个数
char *p=strstr(str,“chi1 huo3 guo1”);//str是被查找字符串,后面的“ ”里面是需要超找的字符串
if(p!=NULL){
if(first_index<0)
first_index=s_count;//判断第一次出现所在的未知
t_count++;//存在吃火锅的个数
}
}
printf("%d\n",s_count);
if(t_count0)
printf("-_-#");
else
printf("%d %d\n",first_index,t_count);
}

6、L1-074 两小时学完C语言 (5 分)

知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。
假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?
输入格式:
输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。
题目保证宝宝看完的字数不超过 N。
输出格式:
在一行中输出宝宝还没有看的字数。
输入样例:
100000 1000 72
输出样例:
28000
#include<stdio.h>
int main()
{int n,k,m;
scanf("%d %d %d",&n,&k,&m);
printf("%d",n-m*k);
return 0;
}
7、L1-073 人与神 (5 分)
跨界大神 L. Peter Deutsch 有一句名言:“To iterate is human, to recurse divine.”(迭代的是人,递归的是神)。本题就请你直接在屏幕上输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中输出 To iterate is human, to recurse divine.。
输入样例:

输出样例:
To iterate is human, to recurse divine.
#include<stdio.h>
int main()
{
printf(“To iterate is human, to recurse divine.”);
return 0;
}

8、L2-014 列车调度 (25 分)
火车站的列车调度铁轨的结构如下图所示。

两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?
输入格式:
输入第一行给出一个整数N (2 ≤ N ≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。
输出格式:
在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。
输入样例:
9
8 4 2 5 3 9 1 6 7
输出样例:
4
#include<bits/stdc++.h>

using namespace std;

const int maxn = 123456;
const int INF = 1 << 30;
int a[maxn];

int main() {
#ifdef MyTest
freopen(“Sakura.txt”, “r”, stdin);
#endif
int n;
scanf("%d", &n);
fill(a, a + n, INF);
for(int i = 0; i < n; ++i) {
int x;
scanf("%d", &x);
*lower_bound(a, a + n, x) = x;
}
cout << lower_bound(a, a + n, INF) - a;
return 0;
}

9、L2-017 人以群分 (25 分)
社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。
输入格式:
输入第一行给出一个正整数N(2≤N≤105)。随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过231。
输出格式:
按下列格式输出:
Outgoing #: N1
Introverted #: N2
Diff = N3
其中N1是外向型人的个数;N2是内向型人的个数;N3是两群人总活跃度之差的绝对值。
输入样例1:
10
23 8 10 99 46 2333 46 1 666 555
输出样例1:
Outgoing #: 5
Introverted #: 5
Diff = 3611
输入样例2:
13
110 79 218 69 3721 100 29 135 2 6 13 5188 85
输出样例2:
Outgoing #: 7
Introverted #: 6
Diff = 9359
#include<bits/stdc++.h>

using namespace std;

int main() {
#ifdef MyTest
freopen(“Sakura.txt”, “r”, stdin);
#endif
int n, ans = 0;
cin >> n;
int y = n / 2, x = n - y;
cout << "Outgoing #: " << x << ‘\n’;
cout << "Introverted #: " << y << ‘\n’;
vector v(n);
for(int i = 0; i < n; i++) cin >> v[i];
sort(v.begin(), v.end(), greater());
for(int i = 0; i< x; i++) ans += v[i];
for(int i = x; i < n; i++) ans -=v[i];
cout << "Diff = " << ans;
return 0;
}

10、L3-022 地铁一日游 (30 分)
森森喜欢坐地铁。这个假期,他终于来到了传说中的地铁之城——魔都,打算好好过一把坐地铁的瘾!
魔都地铁的计价规则是:起步价 2 元,出发站与到达站的最短距离(即计费距离)每 K 公里增加 1 元车费。
例如取 K = 10,动安寺站离魔都绿桥站为 40 公里,则车费为 2 + 4 = 6 元。
为了获得最大的满足感,森森决定用以下的方式坐地铁:在某一站上车(不妨设为地铁站 A),则对于所有车费相同的到达站,森森只会在计费距离最远的站或线路末端站点出站,然后用森森美图 App 在站点外拍一张认证照,再按同样的方式前往下一个站点。
坐着坐着,森森突然好奇起来:在给定出发站的情况下(在出发时森森也会拍一张照),他的整个旅程中能够留下哪些站点的认证照?
地铁是铁路运输的一种形式,指在地下运行为主的城市轨道交通系统。一般来说,地铁由若干个站点组成,并有多条不同的线路双向行驶,可类比公交车,当两条或更多条线路经过同一个站点时,可进行换乘,更换自己所乘坐的线路。举例来说,魔都 1 号线和 2 号线都经过人民广场站,则乘坐 1 号线到达人民广场时就可以换乘到 2 号线前往 2 号线的各个站点。换乘不需出站(也拍不到认证照),因此森森乘坐地铁时换乘不受限制。
输入格式:
输入第一行是三个正整数 N、M 和 K,表示魔都地铁有 N 个车站 (1 ≤ N ≤ 200),M 条线路 (1 ≤ M ≤ 1500),最短距离每超过 K 公里 (1 ≤ K ≤ 106),加 1 元车费。
接下来 M 行,每行由以下格式组成:
<站点1><空格><距离><空格><站点2><空格><距离><空格><站点3> … <站点X-1><空格><距离><空格><站点X>
其中站点是一个 1 到 N 的编号;两个站点编号之间的距离指两个站在该线路上的距离。两站之间距离是一个不大于 106 的正整数。一条线路上的站点互不相同。
注意:两个站之间可能有多条直接连接的线路,且距离不一定相等。
再接下来有一个正整数 Q (1 ≤ Q ≤ 200),表示森森尝试从 Q 个站点出发。
最后有 Q 行,每行一个正整数 Xi,表示森森尝试从编号为 Xi 的站点出发。
输出格式:
对于森森每个尝试的站点,输出一行若干个整数,表示能够到达的站点编号。站点编号从小到大排序。
输入样例:
6 2 6
1 6 2 4 3 1 4
5 6 2 6 6
4
2
3
4
5
输出样例:
1 2 4 5 6
1 2 3 4 5 6
1 2 4 5 6
1 2 4 5 6
#include
#include
#include
using namespace std;
struct Line {
int visited = 0, end = 0; //end为端点标记
vector road;
}line[201];
int graph[201][201];
const long long MAX = 100000001;
void search(int i, const int& vis) {
for (auto& it : line[i].road) {
if (line[it].visited != vis) {
line[it].visited = vis;
search(it, vis);
}
}
}
int main() {
int n, m, k, dis, a, b, q, start;
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
graph[i][j] = MAX;
for (int i = 0; i < m; i++) {
scanf("%d", &a); //录入数据
line[a].end = 1; //端点标记
do {
scanf("%d%d", &dis, &b);
if (graph[a][b] > dis) {
graph[a][b] = graph[b][a] = dis;
}
a = b;
} while (getchar() != ‘\n’);
line[a].end = 1; //端点标记
}
for (int k = 1; k <= n; k++) //弗洛伊德多源最短路径
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (i != j && graph[i][j] > graph[i][k] + graph[k][j])
graph[i][j] = graph[i][k] + graph[k][j];
for (int i = 1; i <= n; i++) {
map<int, int> mp;
for (int j = 1; j <= n; j++) //寻找每个费用的最远距离
if (graph[i][j] != MAX && graph[i][j] > mp[2 + graph[i][j] / k])
mp[2 + graph[i][j] / k] = graph[i][j];
for (int j = 1; j <= n; j++) //录入数据,构建邻接表
if (graph[i][j] == mp[2 + graph[i][j] / k] || (i != j && line[j].end && graph[i][j] != MAX))
line[i].road.push_back(j);
}
scanf("%d", &q);
int flag;
for (int i = 1; i <= q; i++) {
scanf("%d", &start);
line[start].visited = i;
flag = 0;
search(start, i); //搜索
for (int j = 1; j <= n; j++)
if (line[j].visited == i) {
printf("%s%d", flag ? " " : “”, j);
flag = 1;
}
cout << endl;
}
return 0;
}

【天梯赛练习题(c语言)】相关推荐

  1. PTA|团体程序设计天梯赛-练习题库集

    文章目录 关于爬取脚本的编写 L1-001 Hello World! (5 分) L1-002 打印沙漏 (15 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5 分) ...

  2. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)

    L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...

  3. 团体程序设计天梯赛练习题-持续更新中

    1.L1-003 个位数统计 分数 15 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N. 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出 ...

  4. 7-9 集合相似度 (25 分)(天梯赛练习题)

    7-9 集合相似度 (25 分) 给定两个整数集合,它们的相似度定义为:Nc​/Nt​×100%.其中Nc​是两个集合都有的不相等整数的个数,Nt​是两个集合一共有的不相等整数的个数.你的任务就是计算 ...

  5. 团体程序设计天梯赛练习题L1_part 8(36~40)

    L1-036 A乘以B (5 分) #include<bits/stdc++.h> using namespace std; int main(void) {int a, b;cin &g ...

  6. c语言作业i love gplt,集思广益 | 寒假天梯赛准备第一阶段总结

    原标题:集思广益 | 寒假天梯赛准备第一阶段总结 冬季虽寒,但认真好学的信科学子,却正在耐心的为即将到来的团体程序设计天梯赛做准备,让我们一起看看天梯赛寒假备赛第一阶段大家的讨论成果吧! 讨论题目 1 ...

  7. L1-049 天梯赛座位分配 (20分)(C语言)

    L1-049 天梯赛座位分配 (20分)(C语言) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛 ...

  8. PTA团体程序设计天梯赛-练习集Level-1(参考代码C语言/Python版)

    本题目集截止到2022年天梯赛 受个人水平限制,<PTA团体程序设计天梯赛-练习集>中暂时只能把Level-1的题目做出来(也许有些Level-2的题可以写出来?)-我不是专门搞竞赛的,参 ...

  9. 【2020团队天梯赛模拟题L2-1】 根据输出序列判断是否是栈的输出结果(C语言)

    [2020团队天梯赛模拟题L2-1] 根据输出序列判断是否是栈的输出结果(C语言) (因为找不到题目只有回忆写题了)题目描述:输出m,n,k3个整数,其中m代表栈的最大存储容量,n代表输出序列的个数, ...

最新文章

  1. html离开页面时,js实现用户离开页面前提示是否离开此页面的方法(包括浏
  2. php 判断上传的是否是图片,php图片上传检测是否为真实图片格式
  3. .NET 11 个 Visual Studio 代码性能分析工具
  4. python创建文件os_Python之文件与目录操作(os、zipfile、tarfile、shutil)
  5. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法
  6. 从零开始的AI·吃透kNN算法,学完我悟了(附实例代码)
  7. spring源码分析之cache demo
  8. 用JAVA制作微型操作系统4月23日情况
  9. Oracle统计信息的导出、导入
  10. [转]项目管理有感之一 沟通
  11. Java新职篇:类型提升的约定
  12. 图像局部特征(十六)--SimpleBlobDetector
  13. 前端面试有这几篇就够了--HTML篇
  14. 郝斌java_郝斌Java自学教程全集打包
  15. CentOS系统下各文件夹的作用
  16. 微信支付提示参数错误
  17. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
  18. 内存DDR4和DDR5的区别
  19. 举例说明计算机中常用的变址寻址,堆栈寻址,从形式地址到得到操作数的寻址处理过程。
  20. tkinter界面设计

热门文章

  1. 国家公务员局提醒考生:所谓命题专家不可信-公务员-国考
  2. 蒲公英 · JELLY技术周刊 Vol.12 尤雨溪新作 Vite, 你会支持么?
  3. Deepin20.6直接运行exe文件
  4. 利用WITH AS改写SQL
  5. MarkDown 图片大小问题
  6. php curl curlopt_customrequest,php – 如何重置CURLOPT_CUSTOMREQUEST
  7. JAVA EE项目开发及应用实训报告——网上考试系统
  8. 高德地图车机版增加地标性品牌图标 让你“约会”无压力
  9. 乳企齐冲上市,是百家争鸣还是内卷加剧?
  10. 一方包、二方包和三方包的概念