看到没有题解我就给大家浅浅的写一篇吧,如果有错误,希望大家可以帮我指出来哦,创作不易,如果大家给个关注,点个赞就更好了
1:
talkischeapshowmethecode
2:
小学三年级的小明刚接触英语,这天老师正在教如何用英文单词表示数字。
而小明没有认真听课,TA只在乎每个数字需要用到多少个字母。
例如数字111到555,全部写成英文单词分别为:one、two、three、four、five,总共需要191919个字母。
数字342342342为:three hundred and forty-two,需要232323个字母。
数字115115115为:one hundred and fifteen,需要202020个字母。
小明现在已经学会从111数到100010001000了,但是TA想给你一个数字nnn,问你将111到nnn全部用英文表达总共需要个多少英文字母?
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的数学老师觉得编程也能解决一些数学难题,于是给小明出了一道六年级的奥数题:
给定nnn个数字a1,a2,a3,...,ana_1,a_2,a_3,...,a_na1,a2,a3,...,an求
(∑l=1n∑r=ln∑i=lrai)mod 109+7(\sum_{l=1}^{n}\sum_{r=l}^{n}\sum_{i=l}^{r} a_i) \mod {10}^9+7(∑l=1n∑r=ln∑i=lrai)mod109+7
int ans = 0, MOD = 1e9 + 7; for (int l = 1; l <= n; ++l) { for (int r = l; r <= n; ++r) { for (int i = l; i <= r; ++i) { ans = (ans + a[i]) % MOD; } } }但是数学老师说这份代码不足以在111秒之内得出答案,TA希望小明能写出111秒内就得出答案的程序。
小明还不太会编程,于是TA决定来求助已经上大学的你,你可以帮TA实现程序吗?
思路:我们把题给的代码先写出来
如图
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 10; ll a[N],b[N],c[N]; const int md = 1e9 + 7; int main() { int n; cin >> n; ll ans = 0; for (int i = 1; i <= n; i ++) { cin >> a[i]; ans =(ans + a[i]*(n-(i-1))*i%md)%md; } cout << ans << '\n'; }
注意取模和longlong
4:
链接:https://ac.nowcoder.com/acm/contest/55146/D
来源:牛客网
小明高中毕业了,TA平时很喜欢看一些军旅节目,向往着军队的生活,也希望能到部队里磨练一下自己的意志,于是TA报名了义务参军。
小明被分配到了一个非常神秘的部队,这个部队算上小明有nnn个人,每个人都有一个编号。但是小明很快发现TA的编号居然和某一个战友一模一样,紧接着让TA更惊讶的是,部队里居然每个编号都恰好只出现两次!
如果你看不懂,可以理解为有nnn(nnn必然为偶数)个数,对于每一个aia_iai,有且仅有一个j≠ij \neq ij=i,使得ai=aja_i = a_jai=aj。
部队里这些人都是新兵蛋子,而且碰上了一个很特殊的教官,教官在新兵每天早晨训练前都要做这么一件事:
- 将nnn个人均分为两队,每队mmm(m=n2m = \frac{n}{2}m=2n)人,从左到右一字排开,即把a1,a2,a3,...,ana_1,a_2,a_3,...,a_na1,a2,a3,...,an随机分成x1,x2,x3,...,xmx_1,x_2,x_3,...,x_mx1,x2,x3,