2023GPLT选拔题解
看到没有题解我就给大家浅浅的写一篇吧,如果有错误,希望大家可以帮我指出来哦,创作不易,如果大家给个关注,点个赞就更好了
1:
著名开源操作系统Linux的核心创始人Linus有一句经典名言:”Talk is cheap. Show me the code.“
说出这句话时是2000年8月25日,那天有人在Linus的Linux论坛上留言讨论关于线程优化的问题,有个用户提出了一个他自认为非常高效的方案。但是Linus不认同,并且为他是在打嘴炮,于是说出了这句话反击那位用户。
这句话受到了大多数程序员的认可,于是流传至今,成为程序员抨击键盘侠的武器。
把这句话翻译过来大概是:”代码胜于雄辩。“,当然也有人会翻译成:”废话少说,放码过来。“,怎么翻译都可以,只要能让大家都看懂。
当然……这个题目并不是要你把这句话翻译,或是让你回答出关于Linux线程优化的问题。
现在只需要你将”Talk is cheap. Show me the code.“中的标点符号、空格都去掉,并且把所有字母都改为小写,然后在一行内输出出来。
代码:
talkischeapshowmethecode
2:
小学三年级的小明刚接触英语,这天老师正在教如何用英文单词表示数字。
而小明没有认真听课,TA只在乎每个数字需要用到多少个字母。
例如数字1到5,全部写成英文单词分别为:one、two、three、four、five,总共需要19个字母。
数字342为:three hundred and forty-two,需要23个字母。
数字115为:one hundred and fifteen,需要20个字母。
小明现在已经学会从1数到1000了,但是TA想给你一个数字n,问你将1到n全部用英文表达总共需要个多少英文字母?
PS:只需要统计英文字母的数量,空格、连接符不计,“and”满足标准英文语法。
思路:这题写的我烦死了,呜呜呜,但是不难就是一个简单的暴力题
先贴一个十分丑陋的代码,但是好懂,大家一个都可以看懂纯暴力
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6+10; ll a[N]; ll b[21] = {0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8,6}; int main() { int n; cin >> n; for(int i = 1;i <= 20;i ++) a[i] = b[i]; for(int i = 21;i < 30;i ++) { a[i] = 6 + b[i%10]; } a[30] = 6; for(int i = 31;i < 40;i ++) { a[i] = 6 + b[i%10]; } a[40] = 5; for(int i = 41;i < 50;i ++) { a[i] = 5 + b[i%10]; } a[50] = 5; a[60] = 5; for(int i = 51;i < 60;i ++) { a[i] = 5 + b[i%10]; }for(int i = 61;i < 70;i ++) { a[i] = 5 + b[i%10]; } a[70] = 7; for(int i = 71;i < 80;i ++) { a[i] = 7 + b[i%10]; } a[80] = 6; for(int i = 81;i < 90;i ++) { a[i] = 6 + b[i%10]; } a[90] = 6; for(int i = 91;i < 100;i ++) { a[i] = 6 + b[i%10]; } a[100] = 10; for(int i = 101;i < 200;i ++) { a[i] = 13 + a[i%100]; } a[200] = 10; for(int i = 201;i < 300;i ++) { a[i] = 13 + a[i%100]; } a[300] = 12; for(int i = 301;i < 400;i ++) { a[i] = 15 + a[i%100]; } a[400] = 11; for(int i = 401;i < 500;i ++) { a[i] = 14 + a[i%100]; } a[500] = 11; for(int i = 501;i < 600;i ++) { a[i] = 14 + a[i%100]; } a[600] = 10; for(int i = 601;i < 700;i ++) { a[i] = 13 + a[i%100]; } a[700] = 12; for(int i = 701;i < 800;i ++) { a[i] = 15 + a[i%100]; } a[800] = 12; for(int i = 801;i < 900;i ++) { a[i] = 15 + a[i%100]; } a[900] = 11; for(int i = 901;i < 1000;i ++) { a[i] = 14 + a[i%100]; } a[1000] = 11; ll ans = 0; //cout << a[115] << '\n'; for(int i = 1;i <= n;i ++) ans += a[i]; printf("%lld\n",ans); }
再贴一个好看一点的,21级同学没有写出来的可以看看这个
#include<bits/stdc++.h> using namespace std; #define int long long int a[] = {0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8}; int b[] = {0,0,6,6,5,5,5,7,6,6}; int n,s; signed main() { cin>>n; for(int i=1;i<=n;i++) { if(i>=1&&i<20) s+=a[i]; else if(i>=20&&i<100) { s+=b[i/10]+a[i%10]; } else if(i>=100&&i<1000) { if(i%100==0) s+=a[i/100]+7; else if(i%100>=1&&i%100<20) s+=a[i/100]+10+a[i%100]; else if(i%100>=20&&i%100<100) s+=a[i/100]+10+a[i%10]+b[i/10%10]; } else s+=11; } cout << s << '\n'; }
3:
小明现在上六年级了,数学老师很喜欢聪明的TA,想邀请小明参加数学奥林匹克竞赛。
但小明从小就有很强的欲望参加信息学奥林匹克竞赛,TA的数学老师觉得编程也能解决一些数学难题,于是给小明出了一道六年级的奥数题:
给定n个数字a1,a2,a3,...,an求
(∑l=1n∑r=ln∑i=lra