在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
试题 A:组队 本题总分:5分 答案:490(该题需考虑清楚,一个人不能担任两个位置,98+99+98+97+98=490)
试题 B:年号字串
本题总分:5分
【问题描述】 小明用字母 A对应数字 1,B对应 2,以此类推,用 Z对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA对应27,AB对 应28,AZ对应52,LQ对应329。 请问2019对应的字符串是什么? 答案:BYQ
(该题我做的时候是直接算了2019/26=77,AZ是52,所以BY对应77,2019%26=17,Q为17,所以答案为BYQ)
但该题考查的是26进制,代码如下
#include<iostream> #include<cstdio> using namespace std; int main(){ int x = 2019; while(x){ printf("%c", char(x%26+64)); x/=26; } return 0; } //结果取反 试题c:数列求值 本题总分:10分 答案:4659 #include<iostream> #include<cstdio> using namespace std; int main(){ int a, b, c, d; a = b = c = 1;//前三项 for(int i = 4; i <= 20190324; i++){ d = (a+b+c)%10000;//控制后四位数 a = b; b = c; c = d; } printf("%d\n", d); return 0; } 试题 D:数的分解
本题总分:10分
【问题描述】 把 2019分解成 3个各不相同的正整数之和,并且要求每个正整数都不包 含数字2和4,一共有多少种不同的分解方法? 注意交换 3个整数的顺序被视为同一种方法,例如 1000+1001+18和 1001+1000+18被视为同一种。 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; bool check(int x) //判断是否有2,4 { while(x) { if(x%10==2||x%10==4) return true; x/=10; } return false; } int main() { int cnt=0; for(int i=1;i<=2019;i++) { if(check(i)) continue; for(int j=i+1;j<=2019;j++) { if(check(j)) continue; int k=2019-i-j; if(k<=i||k<=j||check(k))continue; cnt+=1; } } cout<<cnt<<endl; return 0; } 其中i,j,k分别为三个整数,逐个模拟,边模拟边判断是否有数字2和4;
试题 F: 特别数的和
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分 【问题描述】 小明对数位中含有 2、0、1、9 的数字很感兴趣 (不包括前导 0) ,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n 中,所有这样的数的和是多少? 【输入格式】 输入一行包含两个整数 n。 【输出格式】 输出一行,包含一个整数,表示满足条件的数的和。 【样例输入】 40 【样例输出】 574 【评测用例规模与约定】 对于 20% 的评测用例,1 ≤ n ≤ 10。 对于 50% 的评测用例,1 ≤ n ≤ 100。 对于 80% 的评测用例,1 ≤ n ≤ 1000。 对于所有评测用例,1 ≤ n ≤ 10000。 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; int main() { int n,sum=0; cin>>n; for(int i=1;i<=n;i++) { if(i%10==1||i/10==1||i%10==2||i/10==2||i%10==9||i/10==9||i%10==0) sum+=i; } cout<<sum<<endl; }
试题 H: 等差数列 时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分 【问题描述】 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项? 【输入格式】 输入的第一行包含一个整数 N。 第二行包含 N 个整数 A 1 ,A 2 ,··· ,A N 。(注意 A 1 ∼ A N 并不一定是按等差数 列中的顺序给出) 【输出格式】 输出一个整数表示答案。 【样例输入】 5 2 6 4 10 20 【样例输出】 10 【样例说明】 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1e5+10; int w[maxn]; int ans[maxn]; int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &w[i]); } if(w[1]==w[2]) //常数列的情况 { printf("%d", n); return 0; } sort(w+1, w+n+1);//先排序,从小到大 for(int i = 1; i < n; i++){ ans[i] = w[i+1]-w[i]; //依次算出两数之差 } int G = ans[1]; for(int i = 2; i <= n-1; i++){ G = gcd(G, ans[i]); } printf("%d\n", (w[n]-w[1])/G+1); return 0; } emmmmm。。。。。。就先写这几道题吧,毕竟还是小菜一只,等我弄懂其他的再补吧。 总之这次比赛很粗心,水题都没做对更别说其他的了,不过我会努力的。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论