哥德巴赫分解

哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和。

你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行。

实际上,一般一个偶数会有多种不同的分解方案,我们关心包含较小素数的那个方案。
对于给定数值范围,我们想知道这些包含较小素数方案中最大的素数是多少。

比如,100以内,这个数是19,它由98的分解贡献。

你需要求的是10000以内,这个数是多少?

注意,需要提交的是一个整数,不要填写任何多余的内容(比如,说明性的文字)

答案:173

  1. #include <bits/stdc++.h>
  2.  
  3. /**
  4. @author:d g w
  5. */
  6. using namespace std;
  7. typedef long long LL ;
  8.  
  9. const int maxn=1e4;
  10.  
  11. int prime[maxn];
  12. int pnum;
  13. int hashtable[maxn]={false};
  14. void f(){
  15. for(int i=;i<maxn;i++){
  16. if(hashtable[i]==false){
  17. prime[pnum++]=i;
  18. for(int j=i+i;j<maxn;j+=i){
  19. hashtable[j]=true;
  20. }
  21. }
  22. }
  23. }
  24.  
  25. int main()
  26. {
  27. f();
  28. for(int i=;i<pnum;i++){
  29. cout<<prime[i]<<" ";
  30. }cout<<endl;
  31. int ans[maxn]={},re=;bool flag=true;
  32. for(int i=;i<=;i+=){
  33. for(int j=;j<=i/;j++){
  34. if(hashtable[j]==false&&hashtable[i-j]==false){
  35. cout<<i<<"="<<j<<"+"<<i-j<<endl;
  36. ans[re++]=min(j,i-j);
  37. break;
  38. }
  39. }
  40. }
  41. int res=;
  42. for(int j=;j<re;j++){
  43. res=max(res,ans[j]);
  44. }
  45. cout<<res;
  46. system("pause");
  47. return ;
  48. }

- 比较容易出错的枚举算法,很多细节需要注意;

  1. #include <bits/stdc++.h>
  2.  
  3. /**
  4. @author:d g w
  5. */
  6. using namespace std;
  7. typedef long long LL ;
  8.  
  9. const int maxn=1e5;
  10.  
  11. int prime[maxn];
  12. int pnum;
  13. int hashtable[maxn]= {false};
  14. void f()
  15. {
  16. for(int i=; i<maxn; i++)
  17. {
  18. if(hashtable[i]==false)
  19. {
  20. prime[pnum++]=i;
  21. for(int j=i+i; j<maxn; j+=i)
  22. {
  23. hashtable[j]=true;
  24. }
  25. }
  26. }
  27. }
  28.  
  29. int main()
  30. {
  31. f();
  32. for(int i=; i<pnum; i++)
  33. {
  34. cout<<prime[i]<<" ";
  35. }
  36. cout<<endl;
  37. int ans[]= {},re=;
  38.  
  39. for(int i=; i<=; i+=)
  40. {
  41. bool flag=true;
  42. for(int j=; prime[j]<; j++)//200以内就够了,可以打印出来看看规律
  43. {
  44. for(int k=j+; prime[k]<; k++)//易错点 顶峰值必须相近 要保证有最小值另一个加数必须大
  45. {
  46. if((prime[j]+prime[k])==i)
  47. {
  48. cout<<prime[j]<<"+"<<prime[k]<<endl;
  49. ans[re++]=min(prime[j],prime[k]);
  50. flag=false;
  51. }
  52. }
  53. if(flag==false)break;
  54. }
  55. }
  56.  
  57. int res=;
  58. for(int j=; j<re; j++)
  59. {
  60. res=max(res,ans[j]);
  61. }
  62. cout<<res;
  63. system("pause");
  64. return ;
  65. }

标题:数字划分

w星球的长老交给小明一个任务:
1,2,3...16 这16个数字分为两组。
要求:
这两组数字的和相同,
并且,两组数字的平方和也相同,
并且,两组数字的立方和也相同。

请你利用计算机的强大搜索能力解决这个问题。
并提交1所在的那个分组的所有数字。

这些数字要从小到大排列,两个数字间用一个空格分开。
即类似:1 4 5 8 ... 这样的答案。

注意,只提交这一组数字,不要填写任何多余的内容。

----------------------------------------
笨笨有话说:
只要一个组的成员确定了,另一个组的成员也就确定了。枚举一个组的成员就可以了。
凭直觉,两个组的成员数目不会差太多吧。
歪歪有话说:
既然求 1 所在的那个组,那只要枚举剩余的成员就可以了。
貌似都是8个成员的可能性很大啊。

answer:1 4 5 8 9 10 15 16

  1. #include <bits/stdc++.h>
  2. /**
  3. @author:d g w
  4. */
  5. using namespace std;
  6. typedef long long LL ;
  7.  
  8. const int maxn=1e5;
  9.  
  10. int prime[maxn];
  11. int pnum;
  12. int hashtable[maxn]= {false};
  13. void f()
  14. {
  15. for(int i=; i<maxn; i++)
  16. {
  17. if(hashtable[i]==false)
  18. {
  19. prime[pnum++]=i;
  20. for(int j=i+i; j<maxn; j+=i)
  21. {
  22. hashtable[j]=true;
  23. }
  24. }
  25. }
  26. }
  27. int a[]={,,,,,,,,,,,,,,,};
  28. int main()
  29. { int flag=true;
  30. do{
  31. if(!flag)break;
  32. //1 4 5 8
  33. if(a[]==&&a[]==&&a[]==&&a[]==){
  34. int x=a[]+a[]+a[]+a[]+a[]+a[]+a[]+a[];
  35. int y=a[]+a[]+a[]+a[]+a[]+a[]+a[]+a[];
  36. if(x==y){
  37. if((x*x)==(y*y)){
  38. if((x*x*x)==(y*y*y)){
  39. //a[0]+a[1]+[2]+a[3]+a[4]+a[5]+a[6]+a[7]
  40. if(a[]<a[]&&a[]<a[]&&a[]<a[]&&a[]<a[]&&a[]<a[]&&a[]<a[]&&a[]<a[]){
  41. cout<<a[]<<' '<<a[]<<' '<<a[]<<' '<<a[]<<' '<<a[]<<' '<<a[]<<' '<<a[]<<' '<<a[]<<endl;
  42. flag=false;
  43. }
  44. }
  45. }
  46. }
  47. }
  48.  
  49. }while(next_permutation(a+,a+));
  50. system("pause");
  51. return ;
  52. }

标题:表达式计算

虽然我们学了许久的程序设计,但对于简单的四则混合运算式,如果让我们完全白手起家地编程来解析,还是有点棘手。

这里,我们简化一下问题,假设只有加法和乘法,并且没有括号来改变优先级。
再假设参加运算的都是正整数。

在这么多的限制条件下,表达式的解析似乎简单了许多。
下面的代码解决了这个问题。请仔细阅读源码,并填写划线部分缺少的代码。

  1. #include <stdio.h>
  2.  
  3. int f3(const char* s, int begin, int end)
  4. {
  5. int sum = ;
  6. int i;
  7. for(i=begin; i<end; i++){
  8. if(s[i]==' ') continue;
  9. sum = sum * + (s[i]-'');
  10. }
  11. return sum;
  12. }
  13.  
  14. int f2(const char* s, int begin, int end)
  15. {
  16. int p = begin;
  17. int pro = ;
  18. while(){
  19. int p0 = p;
  20. while(p!=end && s[p]!='*') p++;
  21. pro *= _______________________________; //填空
  22. if(p==end) break;
  23. p++;
  24. }
  25. printf("f2: pro=%d\n", pro);
  26. return pro;
  27. }
  28.  
  29. int f(const char* s)
  30. {
  31. int p = ;
  32. int sum = ;
  33. while(){
  34. int p0 = p;
  35. while(s[p]!= && s[p]!='+') p++;
  36. sum += f2(s,p0,p);
  37. if(s[p]==) break;
  38. p++;
  39. }
  40.  
  41. return sum;
  42. }
  43.  
  44. int main()
  45. {
  46. int x = f("12+18+5*4*3+10");
  47. printf("%d\n", x);
  48. return ;
  49. }

answer:f3(s,p0,p)

注意:只填写划线处缺少的内容,不要填写已有的代码或符号,也不要填写任何解释说明文字等。

标题: 小数第n位

我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。

本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。

输入:
一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
输出:
一行3位数字,表示:a除以b,小数后第n位开始的3位数字。

比如:
输入:
1 8 1 0.125

程序应该输出:
125

再比如:
输入:
1 8 3

程序应该输出:
500

再比如:
输入:
282866 999000 6
282866 999 6
程序应该输出:
914

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

----------------------------------------
笨笨有话说:
这个除法小学就会算啊,模拟手算除法的过程就可以了吧。
只是数有点大啊....
管它呢,能算多远算多远....

歪歪有话说:
如果我能确定循环节从哪里开始到哪里结束,再大的数不过就是与它取模的余数等价啊

  1. #include <bits/stdc++.h>
  2. /**
  3. @author:d g w
  4. */
  5. using namespace std;
  6. typedef long long LL ;
  7.  
  8. const int maxn=1e3;
  9.  
  10. LL MOD=1e9+;
  11. LL P=1e7+;
  12.  
  13. int main()
  14. {
  15. stringstream ss;
  16. string str,str2;
  17.  
  18. LL a,b,n;
  19. cin>>a>>b>>n;
  20. cout<<setprecision()<<(double)a/b<<endl;
  21. ss<<setprecision()<<(double)a/b;
  22. ss>>str;
  23. int j=;
  24. cout<<str<<endl;
  25. for(int i=n+;i<str.length();i++){
  26. str2[j++]=str[i];
  27. }
  28. if(j==){
  29. cout<<str2[]<<"";
  30. }else{
  31. for(int i=;i<j&&i<;i++){
  32. cout<<str2[i];
  33. }
  34. }
  35. system("pause");
  36. return ;
  37. }

扑克牌

给定4张扑克牌 点数为:1~10
用+ - * / 运算,3个运算符结果正好为24

  1. #include <bits/stdc++.h>
  2. /**
  3. @author:d g w
  4. */
  5. using namespace std;
  6. typedef long long LL ;
  7.  
  8. const int maxn=1e3;
  9.  
  10. LL MOD=1e9+;
  11. LL P=1e7+;
  12.  
  13. const int N=1e5;
  14.  
  15. char rand_op(){
  16. int x=rand()%;
  17. if(x==)return '+';
  18. if(x==)return '-';
  19. if(x==)return '*';
  20. return '/';
  21. }
  22.  
  23. char op(int a,int b,char opr){
  24. if(opr=='+')return (a+b)+'';
  25. if(opr=='*')return (a*b)+'';
  26. if(opr=='-')return (a-b)+'';
  27. if(a%b!=) return 'n';
  28. return a/b;
  29. }
  30.  
  31. bool ji_suan(char buf[]){
  32. stack<char> stk;
  33. for(int i=;i<;i++){
  34. if(buf[i]=='+'||buf[i]=='-'||buf[i]=='*'||buf[i]=='/'){
  35. int a=stk.top()-'';stk.pop();
  36. int b=stk.top()-'';stk.pop();
  37. if(op(a,b,buf[i])=='n'){
  38. return false;
  39. }else{
  40. stk.push(op(a,b,buf[i]));
  41. }
  42. }else{
  43. stk.push(buf[i]);
  44. }
  45. }
  46. if(stk.size()== && (stk.top()-'')==)
  47. return true;
  48. return false;
  49. }
  50. void show(char buf[]){
  51. stack<char> stk;
  52. for(int i=;i<;i++){
  53. if(buf[i]=='+'||buf[i]=='-'||buf[i]=='*'||buf[i]=='/'){
  54. int a=stk.top()-'';stk.pop();
  55. int b=stk.top()-'';stk.pop();
  56. if(op(a,b,buf[i])=='n'){
  57. //return false;
  58. }else{
  59. stk.push('('+stk.top()+buf[i]+stk.top()+')');
  60. }
  61.  
  62. }else{
  63. stk.push(buf[i]);
  64. }
  65. }
  66. cout<<stk.top();
  67. }
  68.  
  69. void f(char str[]){
  70. for(int z=;z<1e4;z++){
  71. char buf[];
  72. for(int i=;i<;i++)buf[i]==str[i];
  73. for(int i=;i<;i++)buf[i]==rand_op();
  74.  
  75. random_shuffle(buf,buf+);
  76. if(ji_suan(buf)){
  77. show(buf);
  78. }
  79. }
  80.  
  81. }
  82.  
  83. int main()
  84. {
  85. srand((unsigned)time(NULL));
  86. char s[];
  87. while(){
  88. cout<<"input number 4"<<endl;
  89. for(int i=;i<;i++){
  90. cin>>s[i];
  91. }
  92. f(s);
  93. }
  94. system("pause");
  95. return ;
  96. }

第八届蓝桥杯大赛个人赛决赛(软件类)真题C++的更多相关文章

  1. 第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第一题:一步之遥

      这题好多人用爆搜/bfs来做,然而这题可用exgcd(扩展欧几里得)做,而且很简便. 先附原题: 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的面 ...

  2. 第九届蓝桥杯大赛个人赛决赛(软件类)真题Java

    更新中.......... 同一年的题解:https://www.cnblogs.com/dgwblog/p/10111903.html   01 结果填空 (满分11分) 标题:年龄问题 s夫人一向 ...

  3. 第八届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.数位和 题目描述 数学家高斯很小的时候就天分过人.一次老师指定的算数题目是:1+2+-+100. 高斯立即做出答案:5050! 这次你 ...

  4. 第八届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.平方十位数 题目描述 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字. 这其中也有很多恰好是平方数(是某个数的平方). 比 ...

  5. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

  6. 第六届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有 ...

  7. 第六届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中, A类含有:8个轮子,1个传感器 B类含有: 6个轮子,3个传感器 C类含有 ...

  8. 第三届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1. 填算式 [结果填空] (满分11分) 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. ...

  9. 第五届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个 ...

随机推荐

  1. UEditor上传文件的默认地址修改

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text.Re ...

  2. zabbix性能优化等

    摘自: http://blog.sina.com.cn/s/blog_4cbf97060101fcfw.html 非常好的一篇,值得有用

  3. html5+CSS3实现的炫酷超链接特效

    今天为大家介绍一个非常炫酷的超链接特效.在你做一些前端的网页时可以在里面去用上这些前卫时尚的效果. 这些超链接特性,大都是借助伪元素.svg.HTML5动画来实现的.效果都很漂亮,不信看下面. 用你的 ...

  4. idea创建maven-archetype-webapp项目无java目录

    使用idea创建一个maven-archetype-webapp项目 查看项目的目录结构,在main的目录下没有java目录 在main目录下创建java目录 使用快捷键 ctrl+alt+shift ...

  5. tensorflow 线性回归 iris

    线性拟合

  6. 规划ASM DISK GROUP、查看asm 磁盘当前状态、mount or dismount 磁盘组、检查磁盘组 metadata 的内部一致性

    规划ASM DISK GROUP: 1. 每个磁盘组里的磁盘应该大小.性能.新旧等一致,不能有太大差距 2. 对database files 和 fast recovery area 分别创建不同的d ...

  7. CF1076E:Vasya and a Tree

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://codeforces.com/problemset/prob ...

  8. POJ1860(ford判环)

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24243   Accepted: 881 ...

  9. Openstack web 添加和删除按钮

    注:当前已经时候用smaba将openstack环境的源码共享到windows系统上,并使用pycharm进行代码编辑和修改(参见openstack开发环境搭建).如下图:

  10. VMware vs openStack对比直观优势

    openStack VS VMware直观优势:1.openStack设计架构开放.生态稳定 大型国际巨头公司支持及开发参与,功能版本迭代快,相对的VMware则是封闭的商业化系统.2.基于openS ...